Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наложение текстуры на цилиндр 
V
    Опции темы
idsp
Дата 9.6.2011, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 27.5.2011

Репутация: нет
Всего: нет



Попробовал я тут как-то на цилиндр текстуру наложить. Как это сделать без glut я так и не понял. Пришлось использовать, как бы мне этого не хотелось glut. Но дело не в этом, а в том, что все текстуры меняют свою цветовую гамму на синеву user posted image.
а должно быть так user posted image


Код

#include <QtGui>
#include "scene3D.h"
#include <math.h>
#include <GL/glu.h>

Scene3D::Scene3D(QWidget *parent) : QGLWidget(parent)
{
    //setMouseTracking(true);
    yRotate = 0.0;
    //angle = 0.0;
    radius = 652;
    quad = 32;
    hight = 1024;
}

void Scene3D::initializeGL()
{
    qglClearColor(Qt::gray);

    LoadTextures();
    glEnable(GL_TEXTURE_2D);
}

void Scene3D::resizeGL(int w, int h)
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    glViewport(0, 0, (GLint)w, (GLint)h);
    glOrtho(-w, w, -h, h, -w, w);
}

void Scene3D::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();    

    gluLookAt(0, -500, -1, 0, -500, 0, 0, 1, 0);
    glRotatef(90, 1.0f, 0.0f, 0.0f);

    glRotatef(yRotate, 0.0f, 1.0f, 0.0f);

    drawCylinder();    
}

void Scene3D::drawCylinder()
{
    glBindTexture(GL_TEXTURE_2D, text[0]);    

    GLUquadric* quadObj = gluNewQuadric();
    gluQuadricTexture(quadObj, GL_TRUE);

    gluCylinder(quadObj, radius, radius, 1024, quad, quad);
    // цилиндр
//    const float PI2 = 3.141593 * 2;

//    glBegin(GL_TRIANGLE_STRIP);
//        for(float i = 0.0; i <= quad; i++)
//        {
//            angle = PI2 * (float)i / (float)quad;
//            qglColor(Qt::green);
//             glVertex3f(radius*cos(angle), 0, radius*sin(angle));
//            qglColor(Qt::blue);
//             glVertex3f(radius*cos(angle), hight, radius*sin(angle));
//        }
//    glEnd();
}


void Scene3D::mousePressEvent(QMouseEvent *mousePress)
{
    mouseLastPosition = mousePress->pos();
}

void Scene3D::mouseMoveEvent(QMouseEvent *mouseMove)
{   
    yRotate += (mouseMove->y() - mouseLastPosition.y());

    updateGL();
    mouseLastPosition = mouseMove->pos();
}
void Scene3D::LoadTextures()
{
    QImage im = QImage(":/Icons/bullshit.jpg");    

    if (!im.isNull())
    {
        glGenTextures(1, &text[0]);
        glBindTexture(GL_TEXTURE_2D, text[0]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);        
        glTexImage2D(GL_TEXTURE_2D, 0, 4, im.width(), im.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, im.bits());
    }
    else
    {
        QMessageBox::warning(this, "ERROR", "error", 0, 1);
    }
}


PM MAIL   Вверх
Vetos
Дата 10.6.2011, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: 3
Всего: 4



Синева изза того что несовпадают каналы, RGB, BGR, допустим формат  TGA ( кстати его можно юзать и без glut) использует BGR, BMP помоему тоже, про TGA вот тут smile 
Попробуй сделай так:
Код

glTexImage2D(GL_TEXTURE_2D, 0, 4, im.width(), im.height(), 0, GL_BGRA, GL_UNSIGNED_BYTE, im.bits());


Это сообщение отредактировал(а) Vetos - 10.6.2011, 18:27


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
idsp
Дата 10.6.2011, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 27.5.2011

Репутация: нет
Всего: нет



Спасибо, помогло. Синева развеялась ^_^
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0410 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.