Results 1 to 7 of 7

Thread: Sometimes, render some strange triangles

  1. #1

    Sometimes, render some strange triangles

    Hey everyone,

    Im rendering a scene in the OpenGL ES, and sometimes appear new strange triangles in the scene.

    Im navigating in the scene changing the position of the gluLookAt.

    In the image, im navigating..
    Frame 2 the LookAt is - 2f in z from Frame 1
    Frame 3 the LookAt is - 2f in z from Frame 2
    Frame 4 the LookAt is - 2f in z from Frame 3
    But, in the frame 4 the render get messed

    http://img231.imageshack.us/img231/9739/frameskr2.jpg


    * the model is correct. I have this model perfect rendered in Java3D


    Thank you

    Wendel B Silva

  2. #2
    theres a video on youtube, you can see the problem
    http://www.youtube.com/watch?v=EWSqzs_MusQ

    I think is something related with the camera.

    Im changing the lookat parameters to simulate the navigation through the scene.

    Any idea?


    -[ edit ]=-=-=-=-=-=-
    i though was the lookAt, but using the Fadi's(1) implemention of the lookat, the program still have the same problem

    (1) - http://www.khronos.org/message_boards/v ... .php?t=541

  3. #3
    Senior Member
    Join Date
    May 2006
    Posts
    353
    Please post some code. Also, which OpenGL ES implementation are you using?
    Georg Kolling, Imagination Technologies
    Please ask questions specific to PowerVR hardware or SDKs on the PowerVR Insider Forum
    DevTech@imgtec.com | http://www.powervrinsider.com

  4. #4
    Im using Vincent Implementation... i tried use Rasteroid but i get the same problem

    The variable Vertex im allocating and getting the vertex at runtime.
    The normal im calculating and normalizing the calculated values.

    Code :
    #pragma comment(lib, "libGLES_CM.lib")
     
    #define GLUTES_STATIC
     
    #include <GLES/glutes.h>
    #include <GLES/glues.h>
    #include <GLES/glues.c>
    #include "main.h"
     
    //CONST
    const GLfloat PI = 3.14159265f;
    const int TAM = 60;
     
    int             	VerticeCount = 0;		//Vertex count of the scene
    GLfloat*		Vertex;				//VerticeCount*3
    GLfloat*		Normal;				
     
    int   regiaoAtual[] = {-1, -1, -1};
    GLfloat xrot = 0;
    GLfloat yrot = 0.0f;
    GLfloat transx = 0.0f;
    GLfloat transy = 0.0f;
    GLfloat transz = 0.0f;
     
    bool backFace = true;
    char* windowCaption = "Wendel - OpenGL ES ";
     
    void init()
    {
    /*-=-=-=-=-=-=-=[ Lights ]=-=-=-=-=-=-*/
    	GLfloat matAmbient[] = { 0.6f, 0.6f, 0.6f, 1.0f };
    	GLfloat matDiffuse[] = { 0.8f, 0.4f, 0.4f, 1.0f };
    	GLfloat lightAmbient[] = { 0.8f, 0.6f, 0.6f, 1.0f };
    	GLfloat lightDiffuse[] = { 0.6f, 0.3f, 0.3f, 1.0f };
     
    	//SPOT LIGHT
    	GLfloat lightPos1[]= { 20.0, 20.0, 20.0,1.0};
    	GLfloat lightPos2[]= {-20.0, 20.0, 20.0,1.0};
    	GLfloat lightPos3[]= { 20.0, 20.0,-20.0,1.0};
    	GLfloat lightPos4[]= {-20.0, 20.0,-20.0,1.0};
    	GLfloat spotDir1[]= {-0.5f,-0.5f,-0.5f};
    	GLfloat spotDir2[]= { 0.5f,-0.5f,-0.5f};
    	GLfloat spotDir3[]= {-0.5f,-0.5f, 0.5f};
    	GLfloat spotDir4[]= { 0.5f,-0.5f, 0.5f};
     
        glLightfv(GL_LIGHT0, GL_AMBIENT , lightAmbient);
    	glLightfv(GL_LIGHT0, GL_DIFFUSE , lightDiffuse);
     
    	glLightfv(GL_LIGHT1, GL_DIFFUSE , lightDiffuse);
    	glLightfv(GL_LIGHT1, GL_AMBIENT , lightAmbient);
    	glLightfv(GL_LIGHT1, GL_POSITION, lightPos1);
    	glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spotDir1);
    	glLightf (GL_LIGHT1, GL_SPOT_CUTOFF,  40.0);    	// set cutoff angle
    	glLightf (GL_LIGHT1, GL_SPOT_EXPONENT, 30.0);   	// set focusing strength
     
    	glLightfv(GL_LIGHT1, GL_DIFFUSE , lightDiffuse);
    	glLightfv(GL_LIGHT1, GL_AMBIENT , lightAmbient);
    	glLightfv(GL_LIGHT1, GL_POSITION, lightPos2);
    	glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spotDir2);
    	glLightf (GL_LIGHT1, GL_SPOT_CUTOFF,  40.0);    	// set cutoff angle
    	glLightf (GL_LIGHT1, GL_SPOT_EXPONENT, 30.0);   	// set focusing strength
     
    	glLightfv(GL_LIGHT1, GL_DIFFUSE , lightDiffuse);
    	glLightfv(GL_LIGHT1, GL_AMBIENT , lightAmbient);
    	glLightfv(GL_LIGHT1, GL_POSITION, lightPos3);
    	glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spotDir3);
    	glLightf (GL_LIGHT1, GL_SPOT_CUTOFF,  40.0);    	// set cutoff angle
    	glLightf (GL_LIGHT1, GL_SPOT_EXPONENT, 30.0);   	// set focusing strength
     
    	glLightfv(GL_LIGHT1, GL_DIFFUSE , lightDiffuse);
    	glLightfv(GL_LIGHT1, GL_AMBIENT , lightAmbient);
    	glLightfv(GL_LIGHT1, GL_POSITION, lightPos4);
    	glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spotDir4);
    	glLightf (GL_LIGHT1, GL_SPOT_CUTOFF,  40.0);    	// set cutoff angle
    	glLightf (GL_LIGHT1, GL_SPOT_EXPONENT, 30.0);   	// set focusing strength
     
    	glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, matAmbient);
    	glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matDiffuse);
    	glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 20.0f);
     
    	glEnable(GL_LIGHTING);
    	glEnable(GL_LIGHT0);
    	glEnable(GL_LIGHT1);
    	glEnable(GL_LIGHT2);
    	glEnable(GL_LIGHT3);
     
    /*-=-=-=-=-=-=-=[ init  ]=-=-=-=-=-=-*/
    	timePrev = GetTickCount();
     
    	glDepthFunc(GL_LEQUAL);
     
    	glShadeModel(GL_SMOOTH);
     
    	glEnable(GL_DEPTH_TEST);
    	if (backFace){ glCullFace(GL_BACK); glEnable(GL_CULL_FACE); }
     
    //	Clear	
    	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    	glClearDepthf(1.0f);
     
    	glVertexPointer(3, GL_FLOAT, 0, Vertex);	
    	glNormalPointer(GL_FLOAT, 0, Normal);
    	glEnableClientState(GL_VERTEX_ARRAY);
    	glEnableClientState(GL_NORMAL_ARRAY);
    }
     
     
    void display()
    {
    //	Clear
    	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    	glClearDepthf(1.0f);
    	glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
     
    //	rotation
    	GLfloat dx = (GLfloat)sin(yrot*PI/180.0f);
    	GLfloat dz = (GLfloat)cos(yrot*PI/180.0f);
    	GLfloat dy = (GLfloat)sin(xrot*PI/180.0f);
    	GLfloat dz2= (GLfloat)cos(xrot*PI/180.0f);
     
    //	Camera
    	glLoadIdentity();
    	gluLookAtf(
    		transx    , transy   , transz,				//Eye    
    		transx-dx , transy+dy, transz-dz-dz2+1.0f,		//Center 
    		0.0f      , 1.0f, 0.0f  );					//Up     
     
    //	draw
    	glDrawArrays(GL_TRIANGLES, 0, VerticeCount);	
     
    	glFlush();
    	glutSwapBuffers();	
    }
     
    void idle()
    {
    	glutPostRedisplay();
    }
     
    void special(int key, int x, int y)
    {
    	GLfloat passo = 0.5f;
    	GLfloat rotacao = 10;
    	GLfloat dx = (GLfloat)sin(yrot*PI/180.0);
    	GLfloat dz = (GLfloat)cos(yrot*PI/180.0);
     
    	switch(key)
    	{
     
    	case GLUT_KEY_F1	: yrot += rotacao; break;
    	case GLUT_KEY_F2	: yrot -= rotacao; break;
    	case GLUT_KEY_HOME	: transy += passo; break;
    	case GLUT_KEY_END	: transy -= passo; break;
     
    	case GLUT_KEY_LEFT  : 
    		transx -= passo*dz;
    		transz += passo*dx;
    		break;
    	case GLUT_KEY_RIGHT : 
    		transx += passo*dz;
    		transz -= passo*dx;
    		break;
     
    	case GLUT_KEY_UP    : 
    		transz -= dz*passo; 
    		transx -= dx*passo; 
    		break;
    	case GLUT_KEY_DOWN  : 
    		transz += dz*passo; 
    		transx += dx*passo; 
    		break;
    	}
    	glutPostRedisplay();
    }
     
    void reshape(int width, int height)
    {
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
     
    	if (!height)
    		height = 1;
     
    	glViewport(0, 0, width, height);
    	gluPerspectivef(45.0f, 1.0f * width / height, 1.0f, 100.0f);
     
    	glMatrixMode(GL_MODELVIEW);	
    	glLoadIdentity();
    }
     
    void freememory(){
    	delete[] Vertex;
    	delete[] Normal;
    }
     
    int main(int argc, char *argv[])
    {		
     
    	glutInit(&argc, argv);
    	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_MULTISAMPLE);
    	glutCreateWindow(windowCaption);
     
    	init();
     
    	glutDisplayFunc(display);
    	glutReshapeFunc(reshape);
    	glutSpecialFunc(special);
     
    	glutIdleFunc(idle);
     
    	glutCreateMenu(menu);
    	glutAddMenuEntry("Quit", 1);
    	glutAttachMenu(GLUT_LEFT_BUTTON);
     
    	glutMainLoop();
     
    	freememory();
     
    	return 0;
    }
     
    void menu(int entry)
    {
    	switch(entry)
    	{
    	case 1 : exit(0); break;
    	}
    }

  5. #5
    I updated the code above to almost everything i have in the main.c.

    Any idea how can i solve this problem?

    thank you

    *ps: sorry for the flood... im updating this topic because i really need fix this

  6. #6
    Running the example 13 of the Zeus Tutorial, i have the same problem.

    I got the example 13 of Zeus Tutorial, make 1 addition
    - Move the LookAt in -Z and +Y

    When the LookAt is right above the box, the same problem appear... dont matter the Y.

    Code :
    //13 - SolidShapes
    //From the example 13, was changed... 
    //keyboard2 to \/
    void keyboard2(int key, int x, int y)
    {
    	switch(key)
    	{
    	case GLUT_KEY_UP    : zz-=1; break;
    	case GLUT_KEY_DOWN  : zz+=1; break;
    	case GLUT_KEY_LEFT  : xx-=1; break;
    	case GLUT_KEY_RIGHT : xx+=1; break;
    	case GLUT_KEY_HOME  : yy+=1; break;
    	case GLUT_KEY_END   : yy-=1; break;
    	}
    }
    //and gluLookAtf to \/
       gluLookAtf(
    		0.0f+xx, 0.0f+yy, 3.0f+zz,
    		0.0f+xx, 0.0f+yy, 0.0f+zz,
    		0.0f, 1.0f, 0.0f);

    Link to the tutorial example
    http://www.zeuscmd.com/tutorials/ope...olidShapes.php



    Im using EVC4 and Vincent.. and GLUT|ES
    No geometry was show when i tried run with Hybrid Rasteroid

  7. #7
    Senior Member
    Join Date
    Sep 2003
    Location
    Seattle, WA
    Posts
    246
    Quote Originally Posted by cobrahc
    I updated the code above to almost everything i have in the main.c.

    Any idea how can i solve this problem?

    thank you

    *ps: sorry for the flood... im updating this topic because i really need fix this
    It's strange that mutliple implementations and even the Zeus examples don't work. How about trying to debug this in a desktop environment, for example using http://developer.hybrid.fi/dgles/index.html?

    For Vincent, your model looks gigantic, so I wouldn't be surprised if you end up getting overflow/underflow problems; after all, it's only a fixed-point implementation.

    - HM

Similar Threads

  1. Can't see error: Assigning texture to 2 triangles
    By Phopojijo in forum Developers Coding:Beginner
    Replies: 3
    Last Post: 03-19-2012, 05:09 PM
  2. Anti Aliased triangles
    By akhil in forum OpenGL ES general technical discussions
    Replies: 1
    Last Post: 09-20-2007, 12:19 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •