Добрый день уважаемые! Ниже будет приведен код,скомпильте и скажите почему объекты прозраны,некоторые сферы не прозрачны.
КОД:
// 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;
}
Так ты уж определись прозрачны они или не прозрачны. :) И вообще, скажи что ты хочешь увидеть и что тебя не устраивает.
Почему цилиндры внутри сфер видны,как сделать так чтобы все что попадало внутрь сфер было невидно?
Включить тест глубины?
Да кстати. Это решение проблемы. У меня по крайней мере работает. :)
Блин такую нужную вещь и не включил :)), пасибо ребят за помощь!
С уважением Серега!
Тема в архиве.