webForumDet fria alternativet

Rum utan tak och golv (OpenGL)

C/C++

12 svar · 314 visningar · startad av Viktor

Medlem sedan aug. 20021 752 inlägg
Frågan#1

Jag precis börjat leka lite med OpenGL och använder mig av NeHe's tutorials. Nu har jag kommit till lektion 10 där man ska göra ett rum med tak, golv och väggar. När jag gör detta i Windows så fungerar det perfekt men när jag gör det för min Dreamcast med gcc och KOS (KGL) så försvinner taket och golvet när jag är inne i rummet, men om jag går ut och tittar på rummet utifrån så ser jag taket och golvet

Såhär ser rit koden ut.

int DrawGLScene(GLvoid)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();

	GLfloat x_m, y_m, z_m, u_m, v_m;
	GLfloat xtrans = -xpos;
	GLfloat ztrans = -zpos;
	GLfloat ytrans = -walkbias-0.25f;
	GLfloat sceneroty = 360.0f - yrot;

	int numtriangles;

	glRotatef(lookupdown,1.0f,0,0);
	glRotatef(sceneroty,0,1.0f,0);
	
	glTranslatef(xtrans, ytrans, ztrans);
	
	numtriangles = sector1.numtriangles;
	glBindTexture(GL_TEXTURE_2D, texture[0]);
	for (int loop_m = 0; loop_m < numtriangles; loop_m++)
	{
		glBegin(GL_TRIANGLES);
			glNormal3f( 0.0f, 0.0f, 1.0f);
			x_m = sector1.triangle[loop_m].vertex[0].x;
			y_m = sector1.triangle[loop_m].vertex[0].y;
			z_m = sector1.triangle[loop_m].vertex[0].z;
			u_m = sector1.triangle[loop_m].vertex[0].u;
			v_m = sector1.triangle[loop_m].vertex[0].v;
			glTexCoord2f(u_m,v_m);
			glVertex3f(x_m,y_m,z_m);

			x_m = sector1.triangle[loop_m].vertex[1].x;
			y_m = sector1.triangle[loop_m].vertex[1].y;
			z_m = sector1.triangle[loop_m].vertex[1].z;
			u_m = sector1.triangle[loop_m].vertex[1].u;
			v_m = sector1.triangle[loop_m].vertex[1].v;
			glTexCoord2f(u_m,v_m);
			glVertex3f(x_m,y_m,z_m);

			x_m = sector1.triangle[loop_m].vertex[2].x;
			y_m = sector1.triangle[loop_m].vertex[2].y;
			z_m = sector1.triangle[loop_m].vertex[2].z;
			u_m = sector1.triangle[loop_m].vertex[2].u;
			v_m = sector1.triangle[loop_m].vertex[2].v;
			glTexCoord2f(u_m,v_m);
			glVertex3f(x_m,y_m,z_m);
		glEnd();
	}
	return(0);
}

och init kod

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,640.0f/480.0f,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);

glColor4f(1.0f, 1.0f, 1.0f, 0.5);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);

(hela koden finns: http://w1.877.telia.com/~u87727362/dc_lesson10.zip)

Någon som har någon ide om varför tak och golv försvinner så fort jag går in i rummer??

/Viktor

Medlem sedan feb. 20002 300 inlägg
#2

Låter som ett typiskt "normalproblem". Dvs. att golvet och takets normal pekar "utåt".

Medlem sedan aug. 20021 752 inlägg
#3

Va???
Kan du förklara lite närmare? Jag är helt ny med detta så jag förstår inte riktigt vad du menar. :)

/Viktor

Medlem sedan feb. 20002 300 inlägg
#4

En yta i 3D har en sk. normal som "pekar" vinkelrätt ut från ytan. Om denna normal pekar bort från dig så syns inte ytan. Se alltså till att normalen pekar mot kameran och inte bort från den.

Medlem sedan maj 20002 993 inlägg
#5

Han sätter ju aldrig någon normal!

Medlem sedan feb. 20002 300 inlägg
#6
glNormal3f( 0.0f, 0.0f, 1.0f);

Där sätter han väl en normal?

Medlem sedan aug. 20021 752 inlägg
#7

ok, nu ser jag och förstår lite mer :)
Någon ide om vad jag ska sätta den till?

/Viktor

Medlem sedan feb. 20002 300 inlägg
#8

Har inte en aning egentligen. Men jag skulle nog testa att sätta z-värdet för normalen till -1.0 istället...

glNormal3f( 0.0f, 0.0f, -1.0f);

Det skadar ju inte att testa? :)

Medlem sedan aug. 20021 752 inlägg
#9

Testat lite nu men det blev inte bättre, får testa mer senare när jag vet vad nomal är för något också och hur det används :)
Tack för hjälpen ändå.

/Viktor

Medlem sedan maj 20002 993 inlägg
#10

Ta bort glNormal**()! Det är ändå inte nödvändigt om du inte använder ogl's lighting! som fö inte är bra!

Medlem sedan aug. 20021 752 inlägg
#11

Tittade lite i dokumentationen för min Dreamcast och där står det att glNormal3f inte är imlementerad ännu, därför fick jag ingen skilnad när jag testade lite igår :)

/Viktor

Medlem sedan maj 20002 993 inlägg
#12

Hur programmerar du för dreamcast?

Medlem sedan aug. 20021 752 inlägg
#13

En special sladd mellan PC och Dreamcast för att ladda upp program (kan även bränna ner det på skivor men det blir lite jobbigt :)) och sedan
http://www.hangar-eleven.de/en/devdc-index.html
http://cadcdev.sourceforge.net/
Riktigt roligt faktiskt :)

/Viktor

306 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
167 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
168 ms — ändringar (db)