none
Visual Studio C++ RRS feed

  • Общие обсуждения

  • Здравствуйте, у меня вот какая проблема:
    Пишу проект в Visual Studio на С++ рисую молекулу воды(один красный шарик,2 синих и 2 цилиндра), также включается вывод плоскости молекулы и электронной оболочки(прозрачной).При вращении глюк-когда синий должен быть над красным получается наоборот,то есть молекула получается частично прозрачная. А когда рисую две молекулы,то через ближнюю видно дальнюю...скажите что делаю не так. Листинг:
    Сама функция отрисовки молекулы:

    void COpenGLControl::DrawMolecula()
    {GLUquadricObj *quadObj;
    quadObj = gluNewQuadric(); // создаем новый объект // для создания сфер и цилиндров
    gluQuadricDrawStyle(quadObj, GLU_FILL); // устанавливаем стиль: сплошной
    int planes = gplanes;
    if(planes)
    {glColor3f(0.7f,0.7f,0.7f); // плоскости выводятся
    glRotatef(90, 1.0f, 0.0f, 0.0f);
    gluDisk(quadObj,0,p_dim,32,100);
    glRotatef(-90, 1.0f, 0.0f, 0.0f);
    glColor3f(1.0f, 1.0f, 1.0f);
    gluCylinder(quadObj, cylinder_r, cylinder_r, RO2, cyl_poly, cyl_poly);
    glPushMatrix();
    glTranslatef(0.0f, 0.0f, RO2);

    glColor3f(0.0f, 0.0f, 1.0f);
    gluSphere(quadObj, rH, H_poly, H_poly); // рисуем сферу H

    if(blend) // оболочки
    {
    glEnable(GL_BLEND);
    glColor3f(0.0f, 1.0f, 0.0f);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE);
    gluSphere(quadObj, rH_g, H_poly, H_poly); // рисуем сферу H
    glDisable(GL_BLEND);
    }
    glPopMatrix();

    glColor3f(1.0f, 1.0f, 1.0f);
    gluCylinder(quadObj, cylinder_r, cylinder_r, RO2, cyl_poly, cyl_poly);


    glPushMatrix();

    glTranslatef(0.0f, 0.0f, RO2);
    glColor3f(0.0f, 0.0f, 1.0f);
    gluSphere(quadObj, rH, H_poly, H_poly); // рисуем сферу H

    if(blend)
    {
    glEnable(GL_BLEND);
    glColor3f(0.0f, 1.0f, 0.0f);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE);
    gluSphere(quadObj, rH_g, H_poly, H_poly); // рисуем сферу H
    glDisable(GL_BLEND);
    glPopMatrix();
    glColor3f(1.0f, 0.0f, 0.0f);
    gluSphere(quadObj, rO2, O_poly, O_poly); // рисуем сферу O
    if(blend)
    {
    glEnable(GL_BLEND);
    glColor3f(0.0f, 1.0f, 1.0f);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE);
    gluSphere(quadObj, rO_g, H_poly, H_poly); // рисуем сферу O
    glDisable(GL_BLEND);
    }
    glPopMatrix();

    }

    Вызываю так:

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();
    gluLookAt( 0, 0,70.0 + camera_delta , 0.0, 0.0, 0.0, 0, 100, 0);

    //тут вращаю
    glRotatef( 90+angle_x ,1.0f, 0.0f, 0.0f);
    glRotatef( angle_y ,0.0f, 1.0f, 0.0f);
    glRotatef( angle_z ,0.0f, 0.0f, 1.0f);
    DrawMolecula();
    • Изменен тип I.Vorontsov 16 июля 2010 г. 6:23
    • Перемещено Tagore Bandlamudi 3 октября 2010 г. 0:25 MSDN Forums consolidation (От:Форум по .NET Framework)
    6 февраля 2010 г. 14:43

Все ответы

  • Уважаемый пользователь!

     

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме.


    Для связи [Mail]
    14 июля 2010 г. 8:02