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?
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?
Może to Ci pomoże:
http://stackoverflow.com/questions/3933027/how-to-get-the-gl-library-headers
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?
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ł.
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
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?
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
).
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ę :).
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;
.
Musisz zaincludować windows.h przed GL/gl.h.
#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.
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'
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// zamiast main()
}
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?
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? :)
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.
To myślę, że float powinien wystarczyć do określenia współrzędnych wierzchołków?
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.
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.
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?
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.
#define GL_GLEXT_PROTOTYPES
bo najwyraźniej to zdefiniowałeś (inaczej byś miał błąd już kompilacji a nie linkera).wglGetProcAddress()
, już po inicjalizacji OpenGL.PFNGLCOMPILESHADERPROC glCompileShader;
glCompileShader = (PFNGLCOMPILESHADERPROC)wglGetProcAddress("glCompileShader");
typ PFNGLCOMPILESHADERPROC
zdefiniowany jest w glext.h
.