PMG

Форумы по созданию игр
Текущее время: 26 июл 2026 08:11

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: NEHE - урок 6
СообщениеДобавлено: 10 авг 2008 00:36 
Не в сети
Новичок

Зарегистрирован: 09 авг 2008 23:53
Сообщения: 4
Дано:
Visual Studio .NET Enterprise Architect 2003

Проблема:
1. Скомпилированный файл весит 224 кб.
2. Код выполняется как слайд-шоу.
3. Если сношу
Код:
# include <stdafx.h>
, пишет fatal error C1010: unexpected end of file while looking for precompiled header directive. Тоже самое пишет даже при замене инклуда оригиналом кода из stdafx.h ;/
Содержимое stdafx.h -----

Код:
#pragma once


#define WIN32_LEAN_AND_MEAN      
// Windows Header Files:
#include <windows.h>
// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>

- в общем как я понимаю ничего особенного.
ах да, еще в project->properties->linker->input пишу OpenGL32.lib GLu32.lib GLaux.lib


Способ написания:
Win32(form) проект.(не пустой, с автокодом формы умолчанию)
все сношу, пишу свой код.

Код:
#include <stdafx.h>

#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glaux.h>


#include "win32.h"

HGLRC   hRC = NULL;
HDC     hDC = NULL;
HWND    hWnd = NULL;
HINSTANCE hInstance;

bool keys[256];
bool active = true;
bool fullscreen = true;

GLfloat   xrot;         
GLfloat   yrot;      
GLfloat   zrot;      

GLuint   texture[1];

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

GLvoid LoadGLTextures()
{
   AUX_RGBImageRec *texture1;
   texture1 = auxDIBImageLoad("Data/tx.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);
}

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)
{
    if(height == 0)
    {
        height = 1;
    }
    glViewport(0,0,width, height);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 0.1f, 100.0f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

int InitGL(GLvoid)
{

   LoadGLTextures();         
   glEnable(GL_TEXTURE_2D);

    glShadeModel(GL_SMOOTH);

    glClearColor(0.0f,0.0f,0.0f,0.0f);

    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);

    glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);

    return true;
}

int DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Очистка экрана и буфера глубины
glLoadIdentity();         

glTranslatef(0.0f,0.0f,-5.0f);

glRotatef(xrot,1.0f,0.0f,0.0f);      
glRotatef(yrot,0.0f,1.0f,0.0f);      
glRotatef(zrot,0.0f,0.0f,1.0f);   

glBindTexture(GL_TEXTURE_2D, texture[0]);

glBegin(GL_QUADS);
   glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);   
   glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);   
   glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);   
   glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);   

   glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);   
   glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);   
   glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);   
   glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);   

   glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);   
   glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f);   
   glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f);   
   glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);   
   
   glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);   
   glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);   
   glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);   
   glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);   

   glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);   
   glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);   
   glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);   
   glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);   

   glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);   
   glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);   
   glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);   
   glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);   
glEnd();                             

xrot+=0.3f;         
yrot+=0.2f;         
zrot+=0.4f;         

return true;
}

GLvoid KillGLWindow(GLvoid)
{
    if(fullscreen)
    {
        ChangeDisplaySettings(NULL, 0);
        ShowCursor(true);
    }

    if(hRC)
    {
        if(!wglMakeCurrent(NULL, NULL))
        {
            MessageBox(NULL, "Release of DC and RC Failed.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
        }
        if(!wglDeleteContext(hRC))
        {
            MessageBox(NULL, "Release Rendering Context Failed.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
        }
        hRC = NULL;
    }

    if(hDC && !ReleaseDC(hWnd, hDC))
    {
        MessageBox(NULL, "Release Device Context Failed.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
        hDC = NULL;
    }

    if(hWnd && !DestroyWindow(hWnd))
    {
        MessageBox(NULL, "Could Not Release hWnd.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
        hWnd = NULL;
    }

    if(!UnregisterClass("OpenGL", hInstance))
    {
        MessageBox(NULL, "Could Not Unregister Class.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
        hInstance = NULL;
    }
}

BOOL CreateGLWindow(LPCSTR title, int width, int height, int bits, bool fullscreenflag)
{
    GLuint      PixelFormat;
    WNDCLASS    wc;
    DWORD       dwExStyle;
    DWORD       dwStyle;

    RECT        WindowRect;
    WindowRect.left     = (long)0;
    WindowRect.right    = (long)width;
    WindowRect.top      = (long)0;
    WindowRect.bottom   = (long)height;

    fullscreen          = fullscreenflag;

    hInstance           = GetModuleHandle(NULL);
    wc.style            = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    wc.lpfnWndProc      = (WNDPROC)WndProc;
    wc.cbClsExtra       = 0;
    wc.cbWndExtra       = 0;
    wc.hInstance        = hInstance;
    wc.hIcon            = LoadIcon(NULL, IDI_WINLOGO);
    wc.hCursor          = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground    = NULL;
    wc.lpszMenuName     = NULL;
    wc.lpszClassName    = "OpenGL";

    if(!RegisterClass(&wc))
    {
        MessageBox(NULL, "Failed To Register The Window Class.", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
        return false;
    }

    if(fullscreen)
    {
        DEVMODE dmScreenSettings;
        memset( &dmScreenSettings, 0, sizeof( dmScreenSettings ) );
        dmScreenSettings.dmSize=sizeof( dmScreenSettings );
        dmScreenSettings.dmPelsWidth  =   width;
        dmScreenSettings.dmPelsHeight  =   height;
        dmScreenSettings.dmBitsPerPel  =   bits;
        dmScreenSettings.dmFields= DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;

        if( ChangeDisplaySettings( &dmScreenSettings, CDS_FULLSCREEN ) != DISP_CHANGE_SUCCESSFUL )
        {
            if( MessageBox( NULL, "The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?",
                "NeHe GL", MB_YESNO | MB_ICONEXCLAMATION) == IDYES )
            {
                fullscreen = false;
            }
            else
            {
                MessageBox( NULL, "Program Will Now Close.", "ERROR", MB_OK | MB_ICONSTOP );
                return false;
            }
        }
    }

    if(fullscreen)
    {
        dwExStyle  =   WS_EX_APPWINDOW;
        dwStyle    =   WS_POPUP;
        ShowCursor( false );
    }
    else
    {
        dwExStyle  =   WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
        dwStyle    =   WS_OVERLAPPEDWINDOW;
    }

    AdjustWindowRectEx( &WindowRect, dwStyle, false, dwExStyle );

    if( !( hWnd = CreateWindowEx(  dwExStyle,
          _T("OpenGL"),
          title,
          WS_CLIPSIBLINGS |
          WS_CLIPCHILDREN |
          dwStyle,         
          0, 0,           
          WindowRect.right-WindowRect.left,
          WindowRect.bottom-WindowRect.top,
          NULL,
          NULL,
          hInstance,
          NULL ) ) ) 
    {
        KillGLWindow();
        MessageBox( NULL, "Window Creation Error.", "ERROR", MB_OK | MB_ICONEXCLAMATION );
        return false;
    }

    static  PIXELFORMATDESCRIPTOR pfd =
    {
        sizeof(PIXELFORMATDESCRIPTOR),
        1,
        PFD_DRAW_TO_WINDOW |
        PFD_SUPPORT_OPENGL |   
        PFD_DOUBLEBUFFER,       
        PFD_TYPE_RGBA,         
        bits,                 
        0, 0, 0, 0, 0, 0,     
        0,                 
        0,                 
        0,                 
        0, 0, 0, 0,         
        32,                 
        0,                 
        0,                 
        PFD_MAIN_PLANE,     
        0,                 
        0, 0, 0             
    };

    if( !( hDC = GetDC( hWnd ) ) )
    {
        KillGLWindow();
        MessageBox( NULL, "Can't Create A GL Device Context.", "ERROR", MB_OK | MB_ICONEXCLAMATION );
        return false;
    }

    if( !( PixelFormat = ChoosePixelFormat( hDC, &pfd ) ) )
    {
        KillGLWindow();
        MessageBox( NULL, "Can't Find A Suitable PixelFormat.", "ERROR", MB_OK | MB_ICONEXCLAMATION );
        return false;
    }

    if( !SetPixelFormat( hDC, PixelFormat, &pfd ) )
    {
        KillGLWindow();
        MessageBox( NULL, "Can't Set The PixelFormat.", "ERROR", MB_OK | MB_ICONEXCLAMATION );
        return false;
    }

    if( !( hRC = wglCreateContext( hDC ) ) )
    {
        KillGLWindow(); 
        MessageBox( NULL, "Can't Create A GL Rendering Context.", "ERROR", MB_OK | MB_ICONEXCLAMATION);
        return false;
    }

    if( !wglMakeCurrent( hDC, hRC ) )
    {
        KillGLWindow();
        MessageBox( NULL, "Can't Activate The GL Rendering Context.", "ERROR", MB_OK | MB_ICONEXCLAMATION );
        return false;
    }

    ShowWindow( hWnd, SW_SHOW );

    SetForegroundWindow( hWnd );

    SetFocus( hWnd );             

    ReSizeGLScene( width, height );

    if( !InitGL() )
    {
        KillGLWindow();
        MessageBox( NULL, _T("Initialization Failed."), _T("ERROR"), MB_OK | MB_ICONEXCLAMATION );
        return false;
    }

    return true;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)           
{
    switch (uMsg)       
    {
        case WM_ACTIVATE:       
        {
            if( !HIWORD( wParam ) )
            {
                active = true;       
            }
            else
            {
                active = false;       
            }
            return 0;         
        }
        case WM_SYSCOMMAND:       
        {
            switch ( wParam )       
            {
                case SC_SCREENSAVE:     
                case SC_MONITORPOWER:     
                return 0;       
            }
            break;             
        }
        case WM_CLOSE:         
        {
            PostQuitMessage( 0 );   
            return 0;           
        }
        case WM_KEYDOWN:           
        {
            keys[wParam] = true;   
            return 0;           
        }
        case WM_KEYUP:           
        {
            keys[wParam] = false;   
            return 0;           
        }
        case WM_SIZE:           
        {
            ReSizeGLScene( LOWORD(lParam), HIWORD(lParam) );
            return 0;         
        }
    }
    return DefWindowProc( hWnd, uMsg, wParam, lParam );
}

int WINAPI WinMain(  HINSTANCE  hInstance, 
      HINSTANCE  hPrevInstance,     
      LPSTR    lpCmdLine,       
      int    nCmdShow )   
{
    MSG  msg;         
    BOOL  done = false;

    if( MessageBox( NULL, "Хотите ли Вы запустить приложение в полноэкранном режиме?",  "Запустить в полноэкранном режиме?", MB_YESNO | MB_ICONQUESTION) == IDNO )
    {
        fullscreen = false;     
    }

    if( !CreateGLWindow( "NeHe OpenGL окно", 1024, 768, 32, fullscreen ) )
    {
        return 0;     
    }

    while( !done )   
    {
        if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
        {
            if( msg.message == WM_QUIT )     
            {
                done = true;       
            }
            else         
            {
                TranslateMessage( &msg );   
                DispatchMessage( &msg ); 
            }
        }
        else           
        {
            if( active )     
            {
                if(keys[VK_ESCAPE]) 
                {
                    done = true; 
                }
                else     
                {
                    DrawGLScene();   
                    SwapBuffers( hDC ); 
                }
            }

            if( keys[VK_F1] )     
            {
                keys[VK_F1] = false; 
                KillGLWindow();       
                fullscreen = !fullscreen; 
       
                if( !CreateGLWindow( _T("NeHe OpenGL структура"), 1024, 768, 32, fullscreen ) )
                {
                    return 0; 
                }
            }
        }
    }

    KillGLWindow();     
    return ( msg.wParam ); 
}




Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NEHE - урок 6
СообщениеДобавлено: 11 авг 2008 09:08 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Fastto писал(а):
Дано:
Visual Studio .NET Enterprise Architect 2003

Проблема:
1. Скомпилированный файл весит 224 кб.
2. Код выполняется как слайд-шоу.


Компилируешь как debug или release?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NEHE - урок 6
СообщениеДобавлено: 12 авг 2008 20:24 
Не в сети
Новичок

Зарегистрирован: 09 авг 2008 23:53
Сообщения: 4
Все спасибо, разобралсо. Непонятным остается только сообщение об ошибке (см. выше).
Получается делать и консольное и виндовое приложение, только фишка в том, что если проект не делать пустым, то при удалении из инклудов stdafx выскакивает ошибка, а если проект делать с нуля, все ок!

Еще вопрос, по теме как раз 6-го урока. на базе урока я почти дописал уже игрушку "кубик рубик"(текстуры, освещение). Чтоб не лезть в дебри дальше, просто подскажите, как направить освещение?, или может быть источник можно вращать командами rotate?
Ну и самый последний вопрос - тормоза графики. У меня машина AthlonXP 2000+, Radeon 9200 SE, RAM 512. Тормозит жутко, точнее даже не тормозит, а медленно работает - т. к. перепадов скорости анимации нет, просто все синхронн медленно, в тоже время на работе почти равноценные машины мой код раза в три быстрее обрабатывают. Ах да :) еще одно, можно как нибудь отследить в пространстве объект, на которым кликнула мышь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NEHE - урок 6
СообщениеДобавлено: 13 авг 2008 08:40 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Fastto писал(а):
Все спасибо, разобралсо. Непонятным остается только сообщение об ошибке (см. выше).


fatal error C1010: unexpected end of file while looking for precompiled header directive - значит есть #ifdef, а #endif нет.

Fastto писал(а):
Получается делать и консольное и виндовое приложение, только фишка в том, что если проект не делать пустым, то при удалении из инклудов stdafx выскакивает ошибка, а если проект делать с нуля, все ок!


Нет. Консольное приложение по идее работает с консолью, а виндовое с окном.

Fastto писал(а):
Еще вопрос, по теме как раз 6-го урока. на базе урока я почти дописал уже игрушку "кубик рубик"(текстуры, освещение). Чтоб не лезть в дебри дальше, просто подскажите, как направить освещение?, или может быть источник можно вращать командами rotate?


7 урок смотрел?!

Fastto писал(а):
Ну и самый последний вопрос - тормоза графики. У меня машина AthlonXP 2000+, Radeon 9200 SE, RAM 512. Тормозит жутко, точнее даже не тормозит, а медленно работает - т. к. перепадов скорости анимации нет, просто все синхронн медленно, в тоже время на работе почти равноценные машины мой код раза в три быстрее обрабатывают.


Все зависит от драйвера и выбора его при инициализации OpenGL. Дело в том, что в некоторых случаях, драйвер может быть не аппаратным, а эмуляцией.

Код:
DescribePixelFormat(hDC_ogl_win, pixelFormat,sizeof pfd_ptr, &pfd_ptr);
  {
    int pal, mcd, acc, icd, opengl, window, bitmap, dbuff;
         pal = (pfd_ptr.iPixelType == PFD_TYPE_COLORINDEX);
      // MCD - Mini Client Driver (урезанная версия аппаратной поддержки OpenGL - аппаратно поддерживает
      // только некоторые функции OpenGL, остальное поддерживается программной реализацией.
      // ICD - Installable Client Driver - полная поддержка OpenGL API реализации 1.2
      // PFD_GENERIC_ACCELERATED PFD_GENERIC_FORMAT   Смысл
      //  0                       0                     полноценный ICD-драйвер с функциями ускорения   
      //  0                       1                     <недопустимая комбинация>   
      //  1                       0                     режим программной эмуляции; всю работу выполняет центральный процессор   
      //  1                       1                     MCD-драйвер; аппаратно реализуется только часть функций ускорения
         mcd = ((pfd_ptr.dwFlags & PFD_GENERIC_FORMAT) && (pfd_ptr.dwFlags & PFD_GENERIC_ACCELERATED));
         acc = !(((pfd_ptr.dwFlags & PFD_GENERIC_FORMAT) &&!(pfd_ptr.dwFlags & PFD_GENERIC_ACCELERATED)));
         icd = (!(pfd_ptr.dwFlags & PFD_GENERIC_FORMAT) &&!(pfd_ptr.dwFlags & PFD_GENERIC_ACCELERATED));
         opengl = (pfd_ptr.dwFlags & PFD_SUPPORT_OPENGL) ? true :false;
         window = (pfd_ptr.dwFlags & PFD_DRAW_TO_WINDOW) ? true :false;
         bitmap = (pfd_ptr.dwFlags & PFD_DRAW_TO_BITMAP) ? true :false;
         dbuff   =!!(pfd_ptr.dwFlags & PFD_DOUBLEBUFFER);
  }


У тебя должен быть ICD, если нет, то надо переставлять драйвера, или смотреть настройки драйверов.

Fastto писал(а):
Ах да :) еще одно, можно как нибудь отследить в пространстве объект, на которым кликнула мышь?


Смотри урок 32.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NEHE - урок 6
СообщениеДобавлено: 14 авг 2008 20:42 
Не в сети
Новичок

Зарегистрирован: 09 авг 2008 23:53
Сообщения: 4
Спасибо огромнейшее, абсолютно каждый ваш совет я принял к сведению, понял, что мне нужна другая видюха и прочитал 32-й урок. НО!!! теперь появилась другая проблема... решил я кубик-рубик свой оформить в класс. Идея в том, что объект класс - это одна составляющая рубика, т. е. я в цикле создаю потом массив экземпляров класса ВОХ в и тоге получаю 3-х мерную матрицу boxes[3][3][3]..... так вот кажому обьекту при создании, я передаю с какой стороны грани поместить наклейку, а наклейка - это плоский четырехугольник, слегка смещенный над плоскостями внешних граней наружных кубиков....... :))) так вот, когда я налаживаю текстуры цветов, все в принципе ок, кроме цвета кубиков под наклейками, они у меня совсем разноцветные получаются. Пробовал я выводить например наклейки толно на переднюю грань рубика, в итоге все елементы стали красного цвета, т. е. те места куда я накладываю текстуры окрашиваются нормально, а нетекстуренные в принципе должны оставаться белыми, а они принимают рандомный цвет какой-то.

вот мой класс:
Код:
class Box
{
public:
    char name[4];
    GLfloat rotate[3];   // 1 - x,     2 - y,     3 - z
   
private:
    GLfloat position[3]; // 1 - x,     2 - y,     3 - z
    int content[6];      // 1 - front, 2 - right, 3 - back, 4 - left, 5 - top, 6 - bottom

public:
    Box(void)
    {};
    Box(char tname[], int tcontent[], GLfloat tposition[])
    {
        for (int i = 0; i < 4; i++)
            name[i] = tname[i];

        for (int i = 0; i < 3; i++)
            position[i] = tposition[i];

        for (int i = 0; i < 6; i++)
            content[i] = tcontent[i];

        for (int i = 0; i < 3; i++)
            rotate[i] = 0.0f;
    };
    void Draw()
    {
        glTranslatef(GlobalX, GlobalY, GlobalZ);
        glRotatef((rotX + rotate[X]),1.0f,0.0f,0.0f);   
        glRotatef((rotY + rotate[Y]),0.0f,1.0f,0.0f);
        glRotatef((rotZ + rotate[Z]),0.0f,0.0f,1.0f);
        glTranslatef(position[X], position[Y], position[Z]);

        glBegin(GL_QUADS);
            glNormal3f( 0.0f,   0.0f,   1.0f);
            glVertex3f( 0.0f,   0.0f,   0.0f);
            glVertex3f( leng,   0.0f,   0.0f);
            glVertex3f( leng,   -leng,  0.0f);
            glVertex3f( 0.0f,   -leng,  0.0f);

            glNormal3f( 1.0f,   0.0f,   0.0f);
            glVertex3f( leng,   0.0f,   0.0f);
            glVertex3f( leng,   0.0f,   -leng);
            glVertex3f( leng,   -leng,  -leng);
            glVertex3f( leng,   -leng,  0.0f);

            glNormal3f( 0.0f,  0.0f,   -1.0f);
            glVertex3f( leng,  0.0f,   -leng);
            glVertex3f( 0.0f,  0.0f,   -leng);
            glVertex3f( 0.0f,  -leng,  -leng);
            glVertex3f( leng,  -leng,  -leng);

            glNormal3f( -1.0f,  0.0f,   0.0f);
            glVertex3f( 0.0f,   0.0f,   0.0f);
            glVertex3f( 0.0f,   0.0f,   -leng);
            glVertex3f( 0.0f,   -leng,  -leng);
            glVertex3f( 0.0f,   -leng,  0.0f);

            glNormal3f( 0.0f,   1.0f,   0.0f);
            glVertex3f( 0.0f,   0.0f,   0.0f);
            glVertex3f( leng,   0.0f,   0.0f);
            glVertex3f( leng,   0.0f,   -leng);
            glVertex3f( 0.0f,   0.0f,   -leng);

            glNormal3f( 0.0f,   -1.0f,  0.0f);
            glVertex3f( 0.0f,   -leng,  0.0f);
            glVertex3f( leng,   -leng,  0.0f);
            glVertex3f( leng,   -leng,  -leng);
            glVertex3f( 0.0f,   -leng,  -leng);
        glEnd();

        if(content[B_FRONT] != C_NONE)
        {
            glNormal3f( 0.0f,   0.0f,   1.0f);
            glBindTexture(GL_TEXTURE_2D, texture[content[B_FRONT]-1]);
                           
            glBegin(GL_QUADS);
                glTexCoord2f(0.0f, 1.0f); glVertex3f( lenk,         -lenk,          ltx         ); 
                glTexCoord2f(0.0f, 0.0f); glVertex3f( lenk,         -(leng-lenk),   ltx         );
                glTexCoord2f(1.0f, 0.0f); glVertex3f( (leng-lenk),  -(leng-lenk),   ltx         );
                glTexCoord2f(1.0f, 1.0f); glVertex3f( (leng-lenk),  -lenk,          ltx         );
            glEnd();
        }
        if(content[B_RIGHT] != C_NONE)
        {
            glNormal3f( 1.0f,   0.0f,   0.0f);
            glBindTexture(GL_TEXTURE_2D, texture[content[B_RIGHT]-1]);
                           
            glBegin(GL_QUADS);
                glTexCoord2f(0.0f, 1.0f); glVertex3f( ltx,          -lenk,          -lenk       ); 
                glTexCoord2f(0.0f, 0.0f); glVertex3f( ltx,          -(leng-lenk),   -lenk       );
                glTexCoord2f(1.0f, 0.0f); glVertex3f( ltx,          -(leng-lenk),   -(leng-lenk));
                glTexCoord2f(1.0f, 1.0f); glVertex3f( ltx,          -lenk,          -(leng-lenk));
            glEnd();
        }
        if(content[B_BACK] != C_NONE)
        {
            glNormal3f( 0.0f,   0.0f,   -1.0f);
            glBindTexture(GL_TEXTURE_2D, texture[content[B_BACK]-1]);
                           
            glBegin(GL_QUADS);
                glTexCoord2f(0.0f, 1.0f); glVertex3f( lenk,        -lenk,          -ltx        ); 
                glTexCoord2f(0.0f, 0.0f); glVertex3f( lenk,        -(leng-lenk),   -ltx        );
                glTexCoord2f(1.0f, 0.0f); glVertex3f( (leng-lenk), -(leng-lenk),   -ltx        );
                glTexCoord2f(1.0f, 1.0f); glVertex3f( (leng-lenk), -lenk,          -ltx        );
            glEnd();
        }
        if(content[B_LEFT] != C_NONE)
        {
            glNormal3f( -1.0f,   0.0f,   0.0f);
            glBindTexture(GL_TEXTURE_2D, texture[content[B_LEFT]-1]);
                           
            glBegin(GL_QUADS);
                glTexCoord2f(0.0f, 1.0f); glVertex3f( ltx,         -lenk,           lenk       ); 
                glTexCoord2f(0.0f, 0.0f); glVertex3f( ltx,         -(leng-lenk),    lenk       );
                glTexCoord2f(1.0f, 0.0f); glVertex3f( ltx,         -(leng-lenk),    (leng-lenk));
                glTexCoord2f(1.0f, 1.0f); glVertex3f( ltx,         -lenk,           (leng-lenk));
            glEnd();
        }
        if(content[B_TOP] != C_NONE)
        {
            glNormal3f( 0.0f,   1.0f,   0.0f);
            glBindTexture(GL_TEXTURE_2D, texture[content[B_TOP]-1]);
                           
            glBegin(GL_QUADS);
                glTexCoord2f(0.0f, 1.0f); glVertex3f( lenk,         ltx,              lenk       ); 
                glTexCoord2f(0.0f, 0.0f); glVertex3f( lenk,         ltx,              (leng-lenk));
                glTexCoord2f(1.0f, 0.0f); glVertex3f( (leng-lenk),  ltx,              (leng-lenk));
                glTexCoord2f(1.0f, 1.0f); glVertex3f( (leng-lenk),  ltx,              lenk       );
            glEnd();
        }
        if(content[B_BOTTON] != C_NONE)
        {
            glNormal3f( 0.0f,   -1.0f,   0.0f);
            glBindTexture(GL_TEXTURE_2D, texture[content[B_BOTTON]-1]);
                           
            glBegin(GL_QUADS);
                glTexCoord2f(0.0f, 1.0f); glVertex3f( lenk,         -ltx,             -lenk       ); 
                glTexCoord2f(0.0f, 0.0f); glVertex3f( lenk,         -ltx,             -(leng-lenk));
                glTexCoord2f(1.0f, 0.0f); glVertex3f( (leng-lenk),  -ltx,             -(leng-lenk));
                glTexCoord2f(1.0f, 1.0f); glVertex3f( (leng-lenk),  -ltx,             -lenk       );
            glEnd();
        }
        glLoadIdentity();
    }


};


Не обращайте внимание на неправильный вывод наклеек, это слегка старая версия... на работе я исправил вывод, а цвета под наклейками так и остались хаотичными...

ах да, вот переменные... к классу

Код:
//***********************************************************************************************
#define X 0
#define Y 1
#define Z 2

#define ROTATE_NONE 0
#define ROTATE_X    1
#define ROTATE_Y    2
#define ROTATE_Z    3

#define C_NONE      0
#define C_RED       1
#define C_GREEN     2
#define C_BLUE      3
#define C_YELLOW    4
#define C_PINK      5
#define C_WHITE     6

#define B_FRONT     0
#define B_RIGHT     1
#define B_BACK      2
#define B_LEFT      3
#define B_TOP       4
#define B_BOTTON    5

//**********************Global Variables*********************************************************
static GLfloat rotX, rotY, rotZ; //angles for a main rotate
static GLfloat stepMR;           //d(angle) for a main rotate
static GLfloat stepAR;           //d(angle) for an animation rotate
static GLfloat leng, lenk;       //leng - len grani, lenk - len kayomki
static GLfloat GlobalX, GlobalY, GlobalZ;
static GLfloat ltx;              // rasstoyanie do nakleyki
static GLfloat lbr;              // rasstoyanie mejdu kubikami

//**************************class****************************************************************


помогите!!!


кстати, если кому интересно, могу выложить проектик, осталось управление сделать и интерфейс, логика движка и анимации уже полностью готова и проверена, вот только вывод бочинит.

кстати, я подумал, а мож кубики тела рубика тож закрашивать... в серый например(всмысле текстурировать)?.... завтра на работе попробую, вечером отпишусь....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NEHE - урок 6
СообщениеДобавлено: 15 авг 2008 08:30 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
>нетекстуренные в принципе должны оставаться белыми, а они принимают рандомный цвет какой-то.

Используй glColor для указания цвета.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NEHE - урок 6
СообщениеДобавлено: 15 авг 2008 17:14 
Не в сети
Новичок

Зарегистрирован: 09 авг 2008 23:53
Сообщения: 4
Пасиб, сработало, я текстуры наложил, и цвета срабтали. Теперь мучаюсь с классом ArcBall... компилятор гад не хочет хавать структуры из arcball.h
Поменял все по своему, работает теперь, но все же интересный глюк, на .NET 2005 все норм, а в 2003 вот такая вот лажа. Ну пожалуй тему можно закрыть. Спасибо за помощь.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB