15 / 5 / 5
Регистрация: 22.06.2013
Сообщений: 31
1

Наложение текстуры в OpenGL

14.09.2014, 23:18. Показов 4222. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Делаю всё по уроку от NeHe, но что то всё равно не то, цвет кубика меняется, но текстура не появляется. Хочу добавить, что компилятор выдавал ошибку, но после подключения glaux.lib ошибки исчезли, но текстура не появилась.
Сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
 
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TButton *Button1;
        TTimer *Timer1;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Timer1Timer(TObject *Sender);
private:    // User declarations
public:     // User declarations
 
        bool __fastcall bSetupPixelFormat(HDC hdc);
        __fastcall TForm1(TComponent* Owner);
        HGLRC ghRC;
        HDC ghDC;
        void __fastcall Draw();
        void __fastcall FormResize(TObject *Sender);
        float rx, ry, rz;
        GLuint  texture[1];
        GLvoid LoadGLTextures()
        {
                AUX_RGBImageRec *texture1;
            texture1 = auxDIBImageLoad("texture2.bmp");
 
                glGenTextures(1, &texture[0]);
            glBindTexture(GL_TEXTURE_2D, texture[0]);
 
                glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
 
                glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1->sizeX, texture1->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1->data);
        }
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
 
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
        ghDC = GetDC(Handle);
        if (!bSetupPixelFormat(ghDC))
                Close();
        ghRC = wglCreateContext(ghDC);
        wglMakeCurrent(ghDC, ghRC);
        glClearColor(0.0, 0.0, 0.0, 0.0);
        glClearDepth(1.0);
        FormResize(Sender);
        glEnable(GL_COLOR_MATERIAL);
        glEnable(GL_DEPTH_TEST);
        glDepthFunc(GL_LESS);
        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT0);
        glShadeModel(GL_SMOOTH);
        float p[4]={3,3,3,1},
        d[3]={-1,-1,-3};
        glLightfv(GL_LIGHT0,GL_POSITION,p);
        glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,d);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
        if(ghRC)
        {
                wglMakeCurrent(ghDC,0);
                wglDeleteContext(ghRC);
        }
        if(ghDC)
                ReleaseDC(Handle, ghDC);
}
//---------------------------------------------------------------------------
 
bool __fastcall TForm1::bSetupPixelFormat(HDC hdc)
{
        PIXELFORMATDESCRIPTOR pfd, *ppfd;
        int pixelformat;
        ppfd = &pfd;
        ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR);
        ppfd->nVersion = 1;
        ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
        ppfd->dwLayerMask = PFD_MAIN_PLANE;
        ppfd->iPixelType = PFD_TYPE_RGBA;
        ppfd->cColorBits = 16;
        ppfd->cDepthBits = 16;
        ppfd->cAccumBits = 0;
        ppfd->cStencilBits = 0;
        if ((pixelformat = ChoosePixelFormat(hdc, ppfd)) == 0)
        {
                MessageBox(NULL, "ChoosePixelFormat failed", "Error", MB_OK);
                return false;
        }
        if (SetPixelFormat(hdc, pixelformat, ppfd) == FALSE)
        {
                MessageBox(NULL, "SetPixelFormat failed", "Error", MB_OK);
                return false;
        }
        return true;
        }
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormResize(TObject *Sender)
{
        glViewport( 0, 0, Width, Height );
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        //glOrtho(-5,5, -5,5, 2,12);
        gluPerspective( 45.0f, (GLfloat)Width/(GLfloat)Height, 0.1f, 100.0f );
        gluLookAt(0,0,5, 0,0,0, 0,1,0);
        glMatrixMode(GL_MODELVIEW);
        glEnable(GL_TEXTURE_2D);        // Разрешение наложение текстуры
        LoadGLTextures();           // Загрузка текстур
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Draw()
{
        glClear(GL_DEPTH_BUFFER_BIT ^ GL_COLOR_BUFFER_BIT);
 
        glLoadIdentity();
 
    glTranslatef(0.0f,0.0f,-5.0f);
 
        glRotatef(rx,1.0f,0.0f,0.0f);       // Вращение по оси X
    glRotatef(ry,0.0f,1.0f,0.0f);       // Вращение по оси Y
    glRotatef(rz,0.0f,0.0f,1.0f);       // Вращение по оси Z
 
        glBindTexture(GL_TEXTURE_2D, texture[0]);
 
        glBegin(GL_QUADS);
 
                glVertex3f( 1.0f, 1.0f,-1.0f); // Право верх квадрата (Верх)
                glVertex3f(-1.0f, 1.0f,-1.0f); // Лево верх
                glVertex3f(-1.0f, 1.0f, 1.0f); // Лево низ
                glVertex3f( 1.0f, 1.0f, 1.0f); // Право низ
 
                glVertex3f( 1.0f,-1.0f, 1.0f); // Верх право квадрата (Низ)
                glVertex3f(-1.0f,-1.0f, 1.0f); // Верх лево
                glVertex3f(-1.0f,-1.0f,-1.0f); // Низ лево
                glVertex3f( 1.0f,-1.0f,-1.0f); // Низ право
 
                glVertex3f( 1.0f, 1.0f, 1.0f); // Верх право квадрата (Перед)
                glVertex3f(-1.0f, 1.0f, 1.0f); // Верх лево
                glVertex3f(-1.0f,-1.0f, 1.0f); // Низ лево
                glVertex3f( 1.0f,-1.0f, 1.0f); // Низ право
 
                glVertex3f( 1.0f,-1.0f,-1.0f); // Верх право квадрата (Зад)
                glVertex3f(-1.0f,-1.0f,-1.0f); // Верх лево
                glVertex3f(-1.0f, 1.0f,-1.0f); // Низ лево
                glVertex3f( 1.0f, 1.0f,-1.0f); // Низ право
 
                glVertex3f(-1.0f, 1.0f, 1.0f); // Верх право квадрата (Лево)
                glVertex3f(-1.0f, 1.0f,-1.0f); // Верх лево
                glVertex3f(-1.0f,-1.0f,-1.0f); // Низ лево
                glVertex3f(-1.0f,-1.0f, 1.0f); // Низ право
 
                glVertex3f( 1.0f, 1.0f,-1.0f); // Верх право квадрата (Право)
                glVertex3f( 1.0f, 1.0f, 1.0f); // Верх лево
                glVertex3f( 1.0f,-1.0f, 1.0f); // Низ лево
                glVertex3f( 1.0f,-1.0f,-1.0f); // Низ право
        glEnd();
        SwapBuffers(ghDC);
        rx += 0.3;
        ry += 0.4;
        rz += 0.1;
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        Timer1->Enabled = !Timer1->Enabled;        
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
        Draw();        
}
//---------------------------------------------------------------------------
Буду очень благодарен за помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2014, 23:18
Ответы с готовыми решениями:

Наложение текстуры opengl
Программирую в Dev cpp. Никак не могу найти код наложения текстур, который будет работать без...

Наложение текстуры. OpenGL ES 2
В общем занесло меня в очередной раз в область, связанную с OpenglES. Использую 2ю версию через...

Наложение текстуры в opengl
помогите наложить текстуру(любую) на вторую сферу вот код: #include &lt;windows.h&gt; #include...

Наложение текстуры в OpenGl
У меня возникла проблема на 6 уроке народного учебника по OpenGl (английская версия)не открывается...

3
DeadHipo
14.09.2014, 23:29
  #2

Не по теме:

Обязательно реализация в билдере? Помниться не так давно по учёбе пришлось иметь дело с opengl и в студии задача решилась быстро... Хотя думаю большой разницы особо нет.

0
15 / 5 / 5
Регистрация: 22.06.2013
Сообщений: 31
15.09.2014, 23:05  [ТС] 3
Решено, не внимательно читал урок, и не добавил рисование текстуры в эту часть кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
glBegin(GL_QUADS);
        // Front face
        glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);  // Bottom left of the texture and quad
        glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);  // Bottom right of the texture and quad
        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);  // Top right of the texture and quad
        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);  // Top left of the texture and quad
        // Back face
        glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);  // Bottom right of the texture and quad
        glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);  // Top right of the texture and quad
        glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);  // Top left of the texture and quad
        glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);  // Bottom left of the texture and quad
        // Top face
        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);  // Top left of the texture and quad
        glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f);  // Bottom left of the texture and quad
        glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f);  // Bottom right of the texture and quad
        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);  // Top right of the texture and quad
        // Bottom face
        glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);  // Top right of the texture and quad
        glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);  // Top left of the texture and quad
        glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);  // Bottom left of the texture and quad
        glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);  // Bottom right of the texture and quad
        // Right face
        glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);  // Bottom right of the texture and quad
        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);  // Top right of the texture and quad
        glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);  // Top left of the texture and quad
        glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);  // Bottom left of the texture and quad
        // Left face
        glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);  // Bottom left of the texture and quad
        glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);  // Bottom right of the texture and quad
        glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);  // Top right of the texture and quad
        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);  // Top left of the texture and quad
    glEnd();
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
21.02.2018, 14:00 4
Цитата Сообщение от 1richard Посмотреть сообщение
но после подключения glaux.lib ошибки исчезли
Как подключил?

Добавлено через 30 минут
Скопировал lib в папку проекта и добавил в проект, но теперь такая ошибка:
[ilink32 Error] Fatal: Unable to open file 'J.OBJ'

Добавлено через 23 часа 7 минут
Нашёл в сети такой костыль:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
GLvoid LoadGLTextures() {
    // загрузка картинки
    Graphics::TBitmap *TXS = new Graphics::TBitmap;
    TXS->LoadFromResourceName( (int)appInstance, "M32A" );
    BITMAP BMP;
    GetObject( TXS->ReleaseHandle(), sizeof(BMP), &BMP );
 
    // Создание текстуры с фильтром по соседним пикселям
    glGenTextures( 1, &texture[0] );
    glBindTexture( GL_TEXTURE_2D, texture[0] );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
    glTexImage2D( GL_TEXTURE_2D, 0, 3, BMP.bmWidth, BMP.bmHeight, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, BMP.bmBits );
 
    glGenTextures( 1, &texture[1] );
    glBindTexture( GL_TEXTURE_2D, texture[1] );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexImage2D( GL_TEXTURE_2D, 0, 3, BMP.bmWidth, BMP.bmHeight, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, BMP.bmBits );
 
    glGenTextures( 1, &texture[2] );
    glBindTexture( GL_TEXTURE_2D, texture[2] );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST );
    gluBuild2DMipmaps( GL_TEXTURE_2D, 3, BMP.bmWidth, BMP.bmHeight, GL_BGRA_EXT, GL_UNSIGNED_BYTE, BMP.bmBits );
 
    free( TXS ); // освобождение памяти под структуру
}
0
21.02.2018, 14:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2018, 14:00
Помогаю со студенческими работами здесь

OpenGL наложение текстуры, падает приложение
после того как выполняю gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, uvCoordsBuffer);, метод...

qt opengl наложение текстуры на сферу полигонами
недавно понадобилось построить трехмерную модель земли. до этого писал на с++, но только консольные...

OpenGL наложение текстуры на квадрат, размеры которого регулируются кнопками
Нужно наложить текстуру на квадрат, размеры которого регулируются кнопками Собственно вот само...

Наложение текстуры
Здравствуйте, подскажите пожалуйста почему при наложении текстуры выдается ошибка. С программой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru