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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 25.05.2009, 17:56   #1
Freer
Пользователь
 
Аватар для Freer
 
Регистрация: 20.10.2008
Сообщений: 64
Печаль OpenGl

Всем привет.
Тема следующая: Два дня назад,в универе, адский препод дал задание написать вот это на OpenGl,про который я толком ничего не знаю=(
За выходные кое что слепил(код ниже),но оказалось что надо по точкам строить.Не знаю что делать
Надеюсь есть знатоки или любители этой графической библиотеки.
Пищу на Builder 6
CPP файл
Код:
//-------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include <gl.h>     //Объявление стандартных функций OpenGL
#include <glaux.h>    //Утилитная библиотека glu предоставляет функции, работающие с матрицами,
// с координатными системами, с кривыми и поверхностями NURBS и т.п.
TWin *Win;
int x=0,y=0,z=0;   //переменные для вращения
//------------------------------------------
__fastcall TWin::TWin(TComponent* Owner)
        : TForm(Owner)
{
}
//--------------------------------------------
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_RGBA;//формат указания цвета. Может принимать значения 
    ppfd->cColorBits = 16;//глубина цвета
    ppfd->cDepthBits = 16;//размер буфера глубины (Z-Buffer)
    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 FormResize(TObject *Sender)
{
  glViewport(50,100,400,400);       //область вывода сцены
  glMatrixMode( GL_PROJECTION );    // устанавливает режим матрицы видового преобразования
  glOrtho(-5,5, -5,5, 2,12);  //станавливает режим ортогонального (прямоугольного) проецирования.
  gluLookAt(0,0,5, 0,0,0, 0,1,0);  //станавливает параметры камеры
  glMatrixMode( GL_MODELVIEW );    //устанавливает режим матрицы видового
  //преобразования после изменения
}
//-------------------
void __fastcall TWin::FormCreate(TObject *Sender)
{
  ghDC = GetDC(Handle);
  if (!bSetupPixelFormat(ghDC))
      Close();
  ghRC = wglCreateContext(ghDC);
  wglMakeCurrent(ghDC, ghRC); 
  glClearColor(0.5,0.5, 0.5, 0.0);  //устанавливает цвет
  FormResize(Sender);              //маштабирование объекта под размер окна
  glEnable(GL_COLOR_MATERIAL); 
  glEnable(GL_DEPTH_TEST); 
  glEnable(GL_LIGHTING);  //реалистичный свет
  glEnable(GL_LIGHT0); //включение освещения
    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 TWin::FormPaint(TObject *Sender)
{
  glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);  //очистка сцены
  GLUquadricObj *quadObj;
  quadObj=gluNewQuadric();    //создание объекта
  glColor3f(1,1,0);       //цвет объекта
  glRotated(100,1,0,0); //Угол наклона
  gluCylinder(quadObj, 1, 1, 5, 10, 10);   //Цилиндер
  gluDeleteQuadric(quadObj);      //удаление объекта
  SwapBuffers(ghDC);          //отображение окна
}
//-----------
void __fastcall TWin::TimerTimer(TObject *Sender)
{
  glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);  //очистка сцены
  GLUquadricObj *quadObj;
  quadObj=gluNewQuadric();        //создание объекта
  glColor3f(1.0,1.0,.0);              //цвет объекта
  gluCylinder(quadObj, 1, 1, 5, 30,30);   //Цилиндер
  glRotatef(4, x,y,z);        //вращение объекта
  gluDeleteQuadric(quadObj);  //удаление объекта
  SwapBuffers(ghDC);          //отображение окна
}
//-----------
void __fastcall TWin::rotationClick(TObject *Sender)
{
        Timer->Enabled=!Timer->Enabled;      //включение и выключение вращения
        if(OSI->ItemIndex==0)            //по оси Х
        {
         x=1;y=0;z=0;
        }
        else if(OSI->ItemIndex==1)     //по оси У
        {
         x=0;y=1;z=0;
        }
        else if(OSI->ItemIndex==2)     //по оси Z
        {
         x=0;y=0;z=1;
        }
}
FreeR

Последний раз редактировалось Freer; 25.05.2009 в 21:54.
Freer вне форума
Старый 25.05.2009, 17:57   #2
Freer
Пользователь
 
Аватар для Freer
 
Регистрация: 20.10.2008
Сообщений: 64
По умолчанию

head файл
Код:
#ifndef Unit1H
#define Unit1H
//-------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
//------------------
class TWin : public TForm
{
__published:	// IDE-managed Components
        TTimer *Timer;
        TButton *rotation;
        TRadioGroup *OSI;
        TPanel *Panel;
        TLabel *Label;
        TPopupMenu *PopupMenu1;
        TMenuItem *N1;
        TMenuItem *N2;
        TMenuItem *N3;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall FormPaint(TObject *Sender);
        void __fastcall TimerTimer(TObject *Sender);
        void __fastcall rotationClick(TObject *Sender);
private:	// User declarations
//ghRC - указатель на контекст воспроизведения (Rendering Context) 
//ghDC - дескриптор устройства ( указатель на окно)
HGLRC ghRC;
HDC  ghDC; 
public:		// User declarations
        __fastcall TWin(TComponent* Owner);
};
//----------------------
extern PACKAGE TWin *Win;
//----------------
#endif
Может хотя б книгой поделитесь? =(
У меня осталось времени 8 часов(
FreeR

Последний раз редактировалось Freer; 25.05.2009 в 19:22.
Freer вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
3D и OpenGl Dj_smart Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 29.10.2017 11:31
OpenGL в С# LeGAl Общие вопросы .NET 0 30.04.2009 02:15
OpenGL Д'якон Компьютерное железо 5 31.01.2009 22:48
OpenGL Witaliy Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 01.05.2008 21:05
OpenGL prizrak1390 Свободное общение 2 07.04.2008 13:43