Börjat kika på lite på 3D. Ett problem jag stött på är när jag försöker skapa flera trianglar. De verkar inte sorteras efter Z-värde. En del trianglar är alltid överst och andra alltid under. Om jag t.ex. snurrar ett klot så hamnar vissa ytor framför andra fast de har ett större Z-kordinat. ("djupare" in i tomheten) Det beror på vilken ordning de renderas i. Du måste använda en Z-buffer, jag vet dock inte hur man gör detta i OpenGL tyvärr. ah... Hittade ett nytt exempel.GL i Dev-C++
<code>
#include <windows.h>
#include <gl/gl.h>
#include <math.h>
...
glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix();
glRotatef( theta, 0.0f, 0.0f, 1.0f );
glRotatef( theta, 0.0f, 1.0f, 0.0f );
glRotatef( theta, 1.0f, 0.0f, 0.0f );
glBegin( GL_QUADS );
for (float th = 0.0f; th < 6.283185f; th += 0.3141593f)
for (float ng = 0.0f; ng < 3.141593f; ng += 0.3141593f)
{
glColor3f( 0.5f * sin(th) * cos(ng) + 0.5f,
0.5f * cos(th) + 0.5f,
0.5f * sin(th) * sin(ng) + 0.5f);
glVertex3f( 0.5f * sin(th) * cos(ng),
0.5f * cos(th),
0.5f * sin(th) * sin(ng));
glVertex3f( 0.5f * sin(th + 0.3141593f) * cos(ng),
0.5f * cos(th + 0.3141593f),
0.5f * sin(th + 0.3141593f) * sin(ng));
glVertex3f( 0.5f * sin(th + 0.3141593f) * cos(ng + 0.3141593f),
0.5f * cos(th + 0.3141593f),
0.5f * sin(th + 0.3141593f) * sin(ng + 0.3141593f));
glVertex3f( 0.5f * sin(th) * cos(ng + 0.3141593f),
0.5f * cos(th),
0.5f * sin(th) * sin(ng + 0.3141593f));
}
glEnd();
glPopMatrix();
SwapBuffers( hDC );
theta += 1.0f;
</code>
Resten av koden är OpenGL-mallen som följer medSv: GL i Dev-C++
/PeterSv: GL i Dev-C++
Var en rad som det stod
<code>
glEnable( GL_DEPTH_TEST );
</code>
Det fixade biffen :)