Zmagania z OpenGL

0

Witam

Mam przykład do OpenGL, w którym załącza się nagłówki gl.h, glu.h i glaux.h. Na stronie www.opengl.org jak szukałem odpowiednich nagłówków to znalazłem tylko bibliotekę GLUT. Skąd mam wziąć biblioteki z wyż.wym. nagłówkami?

0

To teraz pytanie skąd pobrać Win 7 SDK bo tam pisze ze OGL jest w folderze tego SDK, a jak chcę pobrać je przez web installer to jest jakiś error?

1
bajos napisał(a)

Ale jest kilka ISO i nie wiem które wybrać (są 3), a nie chce na darmo pobierać 0,5GB jak nie wiem, które jest dobre...

http://www.microsoft.com/en-us/download/details.aspx?id=8442

Jeśli masz 32-bitowego Windowsa: GRMSDK_EN_DVD.iso
Jeśli masz 64-bitowego Windowsa: GRMSDKX_EN_DVD.iso

Przy czym będą tam dość nieaktualne nagłówki do OpenGL, w których brakuje choćby definicji wielu przydatnych stałych. Na stronie http://www.opengl.org/registry/ znajdziesz nagłówki dodatkowe, będące uzupełnieniem: glext.h i wglext.h. Te dwa pliki zawierają tylko to czego brakuje w Microsoftowych nagłówkach, by je podciągnąć do aktualnego standardu. Ale twoje przykłady ich nie potrzebują.

Pozostaje plik glaux.h, wycofany dawno temu, który wątpię by był jeszcze w SDK.
Jeśli piszesz własny program, nie używaj glaux.h. Używaj FreeGLUT-a. To podobna biblioteka, ale kod z glaux na GLUT-a trzeba trochę przerobić.
Tutaj znajdziesz działające linki do glaux.h i glaux.lib jakbyś jednak potrzebował.

0

Zapowiada się ciekawie. Pobrałem to Windows 7 & .NET Framework 4 SDK (ISO) i uradowany montuję obraz. Instalator uruchamia się klikam Dalej..., w końcu się instaluje aż tu trach (cały czas tłukło) i piszę Installation Failed to klikam View log. Oto koniec log'a, w którym pisze na końcu czynności, które wykonał instalator ponieważ reszta to tylko informacje o systemie. Są jakieś tam errory, ale ja nie wiem za bardzo czego one dotyczą.
http://4programmers.net/Pastebin/2978

-------------------------------EDIT-------------------------------
Już zainstalowałem to SDK. Musiałem tylko usunąć MS VC++ 2010 Redistributable

0

Sorry za Off, wolałem nie zaśmiecać forum nowym tematem, ale gdzie jest lista domyślnie linkowanych bibliotek .lib w Microsoft Visual Studio 2012? Przerzuciłem się na Code::Blocks i tam używam kompilatora GNU GCC, który nie ma wgranych nagłówków Windows, a GLUT potrzebuje bibliotek z Windows SDK i nie wiem, które zalinkować, żeby nie wywalało errora? Może inaczej, po prostu które zalinkować biblioteki i do czego podać ścieżki Windows SDK do CodeBlocks?

0

Komunikaty trzeba czytać, a nie tylko ręce załamywać ;-)

Załóżmy że linker wrzeszczy, że nie ma funkcji CreateWindowEx.
Szukamy tej funkcji na Google. Zazwyczaj pierwszy link prowadzi do dokumentacji na MSDN.
Pod koniec strony jest tabelka, z której dowiadujemy się, że funkcja jest w User32.lib.

i tam używam kompilatora GNU GCC, który nie ma wgranych nagłówków Windows
Yyyy nie wiem co to jest za dystrybucja GCC (MinGW?) ale główne nagłówki i libki windowsowe powinny być. Jak nie ma to doinstaluj...
Na pewno nie trzeba mieć do tego Windows SDK, zwłaszcza że libki GCC (.a) są niekompatybilne z tymi z Visuala (.lib).

0

Używam MinGW tego z CodeBlocks :p. Jak nie pasują pliki .lib jak pasują, przecież dodawałem tam ostatnio te od OpenGL.

PS. Dzięki za poradę :).

0

Teraz mam znów kolejny błąd. Gdy chcę zaincludować GL.h i GLU.h jest jakiś błąd w pliku GL.h. Błędem w pliku GL.g jest: WINGDIAPI void APIENTRY glAccum (GLenum op, GLfloat value);, a dokładniej to WINGDIAPI na początku. Jeszcze dodatkowo w glut.h jest błąd: typedef unsigned short wchar_t;.

0

Musisz zaincludować windows.h przed GL/gl.h.

1
#define _WIN32_WINNT 0x501
#include <windows.h>

#include <GL\GL.h>
#include <GL\GLU.h>
#include <GL\glut.h>

A co to błędu z wchar_t, to używasz oryginalnego GLUT-a czy FreeGLUTa?
http://freeglut.sourceforge.net/

Stary GLUT jest stary i może nie działać dobrze pod dzisiejszymi kompilatorami. Ściągnij FreeGLUT-a.

0

Używam najnowszego GLUTa, ale teraz już nie będę z niego korzystał bo do inicjalizacji okna i grafiki 2D użyję SDL.

/* To już nie aktualne!!! Dla innych potrzebujących powiem, że zainstalowałem od nowa na MinGW wersję pod VC++ */
PS. Sprawa OGL rozwiązana, teraz mam problem z SDL'em pod MinGW, dodaje ścieżki do folderów SDL include i lib, załączam blblioteki libSDL, libSDLmain, libSDL.dll (tutaj chodzi o plik libSDL.dll.a) i na końcu includuje w kodzie plik SDL.h, a otrzymuje błąd: f:\program files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.8.1\..\..\..\libmingw32.a(main.o):main.c:(.text.startup+0xa7)||undefined reference to 'WinMain@16'

0
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
   // zamiast main()
}
0

Teraz próbuję napisać ten loader .obj do OGL i nie mogę odczytać pojedynczego znaku z pliku. Oto kod:

#include <iostream>
#include <fstream>
using namespace std;

int read_line()
{
    fstream plik;
    plik.open("C:\block.txt", ios::in);
    char c;
    while (!plik.eof())
    {
    plik.get(c);
    }
    cout << c << endl;
    plik.close();
    return 0;
}

int main()
{
    read_line();
    return 0;
}

Kod wygląda jak wygląda, ale zmieniam różne rzeczy żeby to naprawić. W czym jest problem? W konsoli wyświetla tylko pusty znak.

PS. Teraz patrze i forum pokolorowało mi \b w linii plik.open("C:\block.txt", ios::in);, jak to \b zastąpić, żeby ścieżka się zgadzała?

0

Jakiego typu zmiennej na liczby zmiennoprzecinkowe użyć do wczytywania pozycji wierzchołka z plików .obj? Jaką maksymalną wartość całkowitą może mieć typ float i double? :)

0

Jaką maksymalną wartość całkowitą może mieć typ float i double?

To jest źle zadane pytanie.
Typy zmiennoprzecinkowe mają określoną (plus-minus) liczbę cyfr znaczących - niezależnie od miejsca, w którym jest przecinek.

Przykładowo, typ float może przechować liczbę 3456764502169616400, ale nie może przechować liczby o 1 większej, najbliższa następna liczba to 3456764777047523300.

Im większa jest liczba (albo mniejsza – przy ujemnych) tym mniejsza jest precyzja: nie tylko po przecinku, ale i „przed”.
Typ double ma znacznie większy zakres – i precyzję – od typu float.

Faktyczny limit („maksymalna wartość całkowita”) oczywiście istnieje – i jest to bardzo duża liczba – ale przy braku precyzji jest to wartość w praktyce bezużyteczna.

Można by za to znaleźć maksymalną wartość całkowitą, dla której float zachowuje jeszcze rozdzielczość <= 1.0, czyli byłaby to ostatnia „kolejna” liczba całkowita dająca się zakodować w typie float czy double. Tej wartości nie znam, ale można by spróbować poszukać jej eksperymentalnie.

0

To myślę, że float powinien wystarczyć do określenia współrzędnych wierzchołków?

0

zakresu wartości nie przewiduję, ale wierzchołki modeli typu samochód czy pojedynczy budynek nie powinny przekroczyć pojemności floata.

co jest jednostką miary w twoim świecie? skoro modelujesz obiekty rzeczywiste, naturalnym byłoby umowne przyjęcie, że są określone np. w metrach. w takim razie chyba nie będziesz modelował obiektów większych niż kilkaset metrów, więc spokojnie wystarczy zarówno zakresu, jak i precyzji przy małych wielkościach (poniżej metra).

i naprawdę, pomyśl o zdefiniowaniu konkretnej jednostki miary, żeby nie było tak że samochód ma nic nie znaczącą długość równą 4.

1

Właśnie planuję zastosować coś typu że np. odległość [0,0,0] -> [1,0,0] będzie równa 1 metrowi np. na mapie gry, tak żeby prościej odmierzać odległość bez żadnych przeliczników.

0

Piszę coś takiego sobie w SDL/OpenGL i chcę wrzucić Załadowany obrazek ze struktury SDL_Surface na ekran współpracujący z OpenGL tylko po odpaleniu programu go nie widać ww. obrazka, a jest tylko sam trójkąt, który narysowałem OpenGL'em. Co jest źle? Da się w ogóle wrzucić SDL_Surface na powierzchnię ekranu, żeby rysować GUI czy może muszę to renderować OGL'em?

OTO KOD:
http://4programmers.net/Pastebin/3161

0

Teraz chciałem odpalić Fragment Shader i pobrałem z www.opengl.org/registry/ nagłówek glext.h i jak użyłem glCompileShader(...) i glShaderSourceARB(...) to dostałem błąd linkera error LNK2019: unresolved external symbol _glCompileShader@4 referenced in function _main i jeszcze błąd to tej drugiej funkcji _glShaderSourceARB@16. Okazuje sie, że mam nagłówki OpenGL z wersji 1.1 z WindowsSDK i w pliku .lib nie ma nawet tych funkcji. To da sie jakoś zdobyć nowsze nagłówki i libki bo wszystko co znalazłem to to samo od 1.1.

0
  1. wywal #define GL_GLEXT_PROTOTYPES bo najwyraźniej to zdefiniowałeś (inaczej byś miał błąd już kompilacji a nie linkera).
  2. musisz załadować wskaźnik na tę funkcję dynamicznie za pomocą wglGetProcAddress(), już po inicjalizacji OpenGL.
PFNGLCOMPILESHADERPROC glCompileShader;
glCompileShader = (PFNGLCOMPILESHADERPROC)wglGetProcAddress("glCompileShader");

typ PFNGLCOMPILESHADERPROC zdefiniowany jest w glext.h.

1 użytkowników online, w tym zalogowanych: 0, gości: 1