Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2009, 15:27   #1
BattleMage
Пользователь
 
Регистрация: 19.09.2007
Сообщений: 11
Вопрос Текстурирование в OpenGL

доброго времени суток, посетители форума!)
если я не в том месте расположил данную тему, то просьба перенести в нужное место и уведовить меня по е-мейл, где я смогу смотреть ответы на мой пост) хотя вроде OpenGL как раз для раздела "Другие"

имеется шарик. большую часть кода взял из папки sample билдера. нажимаю на кнопки происходит попиксельное освещение объекта, удаляется, приближается источник света. цвет фиолетовый. хочу чтобы вместо этого фиолетового цвета на нём была, скажем, моя фотография формата bmp. это возможно? если да, то что лучше для этого сделать?
просьба писать код :)

листинг ниже:

Код:
#include <vcl.h>
#pragma hdrstop
#include "draw.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TOpenGL_Form *OpenGL_Form;
float x=3, y=3, z=3, zoom=1;
//---------------------------------------------------------------------------
__fastcall TOpenGL_Form::TOpenGL_Form(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TOpenGL_Form::Timer1Timer(TObject *Sender)
{
    Timer1->Enabled = false;
    DrawScene();
    Yield();
    Timer1->Enabled = true;
}

BOOL 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_COLORINDEX;
    ppfd->cColorBits = 8;
    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	TOpenGL_Form::DrawScene()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glPushMatrix();

        glTranslated(0.0, 0.0, -radius);
        float mas[]={x,y,z,zoom};
    	GLUquadricObj* quadObj;
	quadObj=gluNewQuadric();

        glColor3d(1.0,0.0,1.0);
	gluSphere(quadObj,1.0, 32, 32);

        glEnable(GL_LIGHTING);//Включаем
	glEnable(GL_LIGHT0);//свет
        glLightfv(GL_LIGHT0, GL_POSITION, mas);
       	glEnable(GL_DEPTH_TEST);//Включаем буфер глубины
       	glEnable(GL_COLOR_MATERIAL);//Включаем учет цвета объекта


    glPopMatrix();


    SwapBuffers(ghDC);
}

GLvoid TOpenGL_Form::initializeGL(GLsizei width, GLsizei height)
{
    GLfloat     maxObjectSize, aspect;
    GLdouble    near_plane;

    glClearIndex( (GLfloat)BLACK_INDEX);

    glClearDepth( 1.0 );

    glEnable(GL_DEPTH_TEST);

    glMatrixMode( GL_PROJECTION );
    aspect = (GLfloat) width / height;
    gluPerspective( 45.0, aspect, 3.0, 7.0 );
    glMatrixMode( GL_MODELVIEW );

    near_plane = 3.0;
    maxObjectSize = 3.0F;
    radius = near_plane + maxObjectSize/2.0;

    latitude = 0.0F;
    longitude = 0.0F;
    latinc = 6.0F;
    longinc = 2.5F;
}

void __fastcall TOpenGL_Form::FormCreate(TObject *Sender)
{
        ghDC = GetDC(Handle);
        if (!bSetupPixelFormat(ghDC))
            Close();
        ghRC = wglCreateContext(ghDC);
        wglMakeCurrent(ghDC, ghRC);
        initializeGL(ClientRect.Right, ClientRect.Bottom);
}

void __fastcall TOpenGL_Form::FormClose(TObject *Sender, TCloseAction &Action)
{
	    Timer1->Enabled = false;
        if (ghRC)
            wglDeleteContext(ghRC);
        if	(ghDC)
        	ReleaseDC(Handle, ghDC);
}

void __fastcall TOpenGL_Form::FormKeyDown(TObject *Sender, WORD &Key,
	TShiftState Shift)
{
  if(Key==188) z--;
  if(Key==190) z++;
  if(Key==37) x--;
  if(Key==39) x++;
  if(Key==38) y++;
  if(Key==40) y--;
  DrawScene();
}
BattleMage вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
3D и OpenGl Dj_smart Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 29.10.2017 11:31
OpenGL Witaliy Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 01.05.2008 21:05
OpenGL prizrak1390 Свободное общение 2 07.04.2008 13:43
OpenGL Nbveh Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 25.10.2007 18:56