ПрограммированиеФорумГрафика

Проблемы с отображением в GLUT

#0
4:43, 5 дек 2009

Добрый день уважаемые! Ниже будет приведен код,скомпильте и скажите почему объекты прозраны,некоторые сферы не прозрачны.
КОД:
// robot.cpp : Defines the entry point for the application.
//
#include <windows.h>

#include <GL/glut.h>
#include <gl/gl.h>     
#include <gl/glu.h>   
#pragma comment (lib, "glut32.lib");

GLfloat  xrot;        // X Rotation
GLfloat  yrot;        // Y Rotation
GLfloat  zrot;

GLfloat  xrot1;        //
GLfloat  yrot1;        //
GLfloat  zrot1;

GLfloat  xrot2;       
GLfloat  yrot2;
GLfloat zrot2;

GLfloat  xrot3;       
GLfloat  yrot3;
GLfloat zrot3;

GLfloat  xrot4;       
GLfloat  yrot4;
GLfloat zrot4;

GLfloat x1;          //
GLfloat y1;          //
GLfloat z1;          //

GLfloat xx;
GLfloat yy;
GLfloat zz;

GLfloat a;

GLint n;       
GLfloat mX;
GLfloat mY;
GLfloat mZ;
GLfloat mM;

GLUquadricObj *quadObj;

void key()
{
if(GetAsyncKeyState(107))n+=0.5;//скорость вращения
if(GetAsyncKeyState(109))n-=0.5;///-/
///////-ПОВОРОТЫ СЦЕНЫ-------///////////////////////
if(GetAsyncKeyState(VK_UP))xrot-=0.5+n;
if(GetAsyncKeyState(VK_DOWN))xrot+=0.5+n;
if(GetAsyncKeyState(VK_RIGHT))yrot+=0.5+n;
if(GetAsyncKeyState(VK_LEFT))yrot-=0.5+n;
if(GetAsyncKeyState(33))zrot+=0.5+n;
if(GetAsyncKeyState(34))zrot-=0.5+n;
  //МАШТАБИРОВАНИЕ СЦЕНЫ
if(GetAsyncKeyState(187))mM+=0.05+n;
if(GetAsyncKeyState(189))mM-=0.05+n;
  //ПЕРЕМЕЩЕНИЕ СЦЕНЫ
if(GetAsyncKeyState(97))x1-=0.05+n;//ВЛЕВО
if(GetAsyncKeyState(99))x1+=0.05+n;//ВПРАВО
if(GetAsyncKeyState(101))y1+=0.05+n;//ВВЕРХ
if(GetAsyncKeyState(98))y1-=0.05+n;//ВНИЗ

///////-ПОВОРОТ ОБЪЕКТА-------///////////////////////Q-A-W-S-E-D-R-F-T-G-Y-H-U-J-IK
if(GetAsyncKeyState(81))xrot1-=0.5+n;//
if(GetAsyncKeyState(65))xrot1+=0.5+n;
if(GetAsyncKeyState(87))yrot1+=0.5+n;
if(GetAsyncKeyState(83))yrot1-=0.5+n;
if(GetAsyncKeyState(69))zrot1+=0.5+n;
if(GetAsyncKeyState(68))zrot1-=0.5+n;
//////////////////////////////////
if(GetAsyncKeyState(82))xrot2-=0.5+n;
if(GetAsyncKeyState(70))xrot2+=0.5+n;
if(GetAsyncKeyState(84))yrot2+=0.5+n;
if(GetAsyncKeyState(71))yrot2-=0.5+n;
if(GetAsyncKeyState(89))zrot2+=0.5+n;
if(GetAsyncKeyState(72))zrot2-=0.5+n;
///////////////////////////////////
if(GetAsyncKeyState(85))xrot3-=0.5+n;
if(GetAsyncKeyState(74))xrot3+=0.5+n;
if(GetAsyncKeyState(73))yrot3+=0.5+n;
if(GetAsyncKeyState(75))yrot3-=0.5+n;
if(GetAsyncKeyState(79))zrot3+=0.5+n;
if(GetAsyncKeyState(76))zrot3-=0.5+n;
/////////////////////////////////////
if(GetAsyncKeyState(57))a+=0.1;
if(GetAsyncKeyState(56))a-=0.1;
}

//Инициализация
void init(void)
{
mM=1.4;
a=0;
//glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_FLAT);
quadObj = gluNewQuadric();

}

//Изменение размеров окна
void reshape(int w, int h)
{
  glViewport(0,0,(GLsizei) w, (GLsizei) h);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluPerspective(75.0,(GLfloat) w/ (GLfloat) h,6.0,25.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  glTranslatef(0.0,0.0,-10.0);
//gluLookAt(0,0,10,0,0,0,0,1,0);

}

void oci()
{
      glRotatef(135,0.0f,1.0f,0.0f);
    glColor3f(1.0f,0.0f,0.0f);
    glBegin(GL_LINES);
      glVertex3f(-0.1f, 0.0f, 0.0f);
      glVertex3f(1.0f, 0.0f, 0.0f);
    glEnd();
    glColor3f(0.0f,1.0f,0.0f);
    glBegin(GL_LINES);
      glVertex3f(0.0f, -0.1f, 0.0f);
      glVertex3f(0.0f, 1.0f, 0.0f);
    glEnd();
    glColor3f(0.0f,0.0f,1.0f);
    glBegin(GL_LINES);
      glVertex3f(0.0f, 0.0f, -0.1f);
      glVertex3f(0.0f, 0.0f, 1.0f);
    glEnd();
}

void manip()
{
////////////////////////////////////////
//////////////////////////////////////////------------------------------------
////-------ЛИСТ 1------------------///////------------------------------------
////////////////////////////////////////

//ОПОРА-----------------------------
glNewList(1, GL_COMPILE);       
gluQuadricDrawStyle(quadObj, GLU_FILL);
glColor4f(0.6f,0.8f,1.0f,a);
glTranslatef(0,0,0);
glScalef(0.1, 0.1, 0.1);
glRotatef(-90,1.0f,0.0f,0.0f);
gluCylinder (quadObj, 2.0, 1.0, 2.5, 50, 100);

glColor4f(0.9f,0.9f,1.0f,1.0f);
gluDisk(quadObj, 0.0, 2.0, 40,40);
//////СФЕРА ******------------------------////
glTranslatef(0,0,2);
glColor4f(1.0f,0.2f,0.3f,a);
gluSphere (quadObj, 1.8, 24, 24);
glutPostRedisplay();
glEndList();
/////////////////////////////////////////
//////////////////////////////////////////------------------------------------
////-------ЛИСТ 2-------------------//////------------------------------------
/////////////////////////////////////////
glNewList(2, GL_COMPILE);
glColor4f(0.6f,0.8f,1.0f,0.5f);
glTranslatef(0,0,0);
gluCylinder (quadObj, 1.2, 0.8, 5.0, 50, 1);
//////СФЕРА 2---------------------------
glTranslatef(0,0,5);
glColor4f(1.0f,0.2f,0.3f,1.0f);
gluSphere (quadObj, 1.5, 24, 24);

glEndList();

/////////////////////////////////////////
//////////////////////////////////////////------------------------------------
////-------ЛИСТ 3-------------------//////------------------------------------
/////////////////////////////////////////
glNewList(3, GL_COMPILE); 
   
glColor3f(0.6f,0.8f,1.0f);
glRotatef(90,1.0f,0.0f,0.0f);
glTranslatef(0,0,0);
gluCylinder (quadObj, 0.5, 0.3, 3.0, 50, 10);
//////СФЕРА -----------------------------
glTranslatef(0,0,3);
glColor3f(1.0f,0.2f,0.3f);
gluSphere (quadObj, 0.7, 24, 24);
//////КОСТЬ -----------------------------
glColor3f(0.6f,0.8f,1.0f);
glRotatef(-60,1.0f,0.0f,0.0f);
glTranslatef(0,0,0);
gluCylinder (quadObj, 0.3, 0.1, 1.4, 50, 10);
//////КОСТЬ -----------------------------/
glColor3f(0.6f,0.8f,1.0f);
glRotatef(90,1.0f,0.0f,0.0f);
glTranslatef(0,1.255,0.08);
gluCylinder (quadObj, 0.15, 0.05, 0.7, 50, 10);
//////КОСТЬ -----------------------------/
glColor3f(0.6f,0.8f,1.0f);
glTranslatef(0,-1.3,0);
glRotatef(30,1.0f,0.0f,0.0f);
gluCylinder (quadObj, 0.3, 0.1, 1.4, 50, 10);
//////КОСТЬ -----------------------------/
glTranslatef(0,0.0,1.28);
glRotatef(-90,1.0f,0.0f,0.0f);
gluCylinder (quadObj, 0.15, 0.05, 0.7, 50, 10);

glEndList();
}
////////////////////////////////////////////////
//Отображение//////////////////////////////////////
////////////////////////////////////////////////
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
key();
mX=mY=mZ=mM;

glPushMatrix(); 
glTranslatef(x1,y1,z1);
glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);
glRotatef(zrot,0.0f,0.0f,1.0f);
glScalef(mX,mY,mZ);

oci();////////////////////рисуем оси
  glCallList(1);
  //glTranslatef(0,0,0);
  glRotatef (xrot1, 1.0f, 0.0f, 0.0f);
  glRotatef (yrot1, 0.0f, 1.0f, 0.0f);
  glRotatef (zrot1, 0.0f, 0.0f, 1.0f); 
  glPushMatrix();
  glCallList(2);
 
  glRotatef (xrot2, 1.0f, 0.0f, 0.0f);
          glRotatef (yrot2, 0.0f, 1.0f, 0.0f);
          glRotatef (zrot2, 0.0f, 0.0f, 1.0f);
          glPushMatrix();
                glRotatef(90, 1.0f, 0.0f, 0.0f);
                glCallList(2);
                  glRotatef (xrot3, 1.0f, 0.0f, 0.0f);
                  glRotatef (yrot3, 0.0f, 1.0f, 0.0f);
                  glRotatef (zrot3, 0.0f, 0.0f, 1.0f);
                  glPushMatrix();
                  glCallList(3);
                  glPopMatrix();
          glPopMatrix();
         
  glPopMatrix();
 
glPopMatrix();

glutSwapBuffers();
glutPostRedisplay();

}

//Реакция на клавиатуру
void keyboard(unsigned char key,int x, int y)
{
  switch(key)
  {
//------------/////////////////////////////////////////////////////////////////////
//////////////Сброс-----------------------------------------------------------------
//------------/////////////////////////////////////////////////////////////////////         
    case (48):
        xrot=45;
        yrot=-180;
        zrot=0;
        xrot1=0;
        yrot1=0;
        zrot1=0;
        xrot2=0;
        yrot2=0;
        zrot2=0;
        xrot3=0;
        yrot3=0;
        zrot3=0;
        xrot4=0;
        yrot4=0;
        zrot4=0;
        x1=0;
        y1=0;
        z1=0;
        xx=yy=zz=0;
        n=1;
            mM=3.4;
        glutPostRedisplay();
    break;


    default:
      break;
  }
}


int main(int argc, char **argv)
{
  glutInit(&argc,argv);
  glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
  glutInitWindowSize(500,500);
  glutInitWindowPosition(100,100);
  glutCreateWindow("Manip");
  init();
  manip();
  glutDisplayFunc(display);
  glutReshapeFunc(reshape);
  glutKeyboardFunc(keyboard);
  glutMainLoop();

  return 0;
}

#1
8:47, 5 дек 2009

Так ты уж определись прозрачны они или не прозрачны. :) И вообще, скажи что ты хочешь увидеть и что тебя не устраивает.

#2
11:45, 5 дек 2009
Манипулятор | Проблемы с отображением в GLUT

Почему цилиндры внутри сфер видны,как сделать так чтобы все что попадало внутрь сфер было невидно?

#3
11:59, 5 дек 2009

Включить тест глубины?

#4
14:28, 5 дек 2009

Да кстати. Это решение проблемы. У меня по крайней мере работает. :)

#5
18:01, 5 дек 2009

Блин такую нужную вещь и не включил :)), пасибо ребят за помощь!
С уважением Серега!

ПрограммированиеФорумГрафика

Тема в архиве.