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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Бегущая строка (?), Основы OpenGL 
:(
    Опции темы
saboth
  Дата 20.5.2011, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вообщем беда в чём - пытаюсь сделать бегущую строку на OpenGL, что бы она из приложения подхватывала текст. В ЖеЛе новичёк.

Перерыл кучу материала. Все пособия, всех этих супер профессоров и прочих докторов наук - мусор. Куча кода и пока ни разу не заработало.
Нашёл пример, какого то студента, кода в два раза меньше, половину библиотек, в отличие от профессорских примеров, вообще не подключено, т.е. даже в среду разработки (BDS) не линкованы, и всё работает наипрекраснейше. Текст программы практический без комментариев, поэтому разобраться, как то не получается.

Код исходника ниже. Практический первозданный чуток дополненный. И подвязал exe-шник.

Отсюдова вопросы:
1. Как можно повернуть камеру или текст чтобы букву «А» таки было видно?
А ещё лучше перейти в двухмерное отображение. Пробовал работать с третьей координатой – тяжеловастенько, очень криво.

2. Как можно прицепить шрифты, желательно кириллические? Что бы он натурально стринговую (или чаровскую) переменную преобразовывал в изображение.

3. Можно ли выводить изображение не на всю форму, а на определённую область, или к примеру на компаненту TPanel?


А вот если понадобится, система у меня такая:
ОС:
WindowsXP Home Edition (2002) SP3

Среда:
Borland Developer Studio 2006

Библиотеки GL:
gl.h
glu.h
glaux.h

Поддерживаемая OpenGL: 1.5
2.0 уже затупает (на 60% тянет)


*.cpp
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;


//---------------------------------------------------------------------------
HGLRC hGLRC;
HDC   hDC;
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
   hDC = GetDC(Handle);

   int PixelFormat;
   PIXELFORMATDESCRIPTOR pfd =
   {sizeof(PIXELFORMATDESCRIPTOR), 1,
      PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
      PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0,0, 0,0,0,0,0, 32, 0,
      0, PFD_MAIN_PLANE, 0, 0,0,};
   PixelFormat = ChoosePixelFormat (hDC, &pfd);
   if (SetPixelFormat (hDC, PixelFormat, &pfd) == FALSE)
      Application->Terminate ();

   hGLRC = wglCreateContext(hDC);
   if(hGLRC == NULL) Application->Terminate ();
   if(wglMakeCurrent(hDC, hGLRC) == false) Application->Terminate ();

   glEnable (GL_DEPTH_TEST);

   glViewport (0, 0, Width, Height);

   glShadeModel (GL_SMOOTH);
   glClearColor (0.0, 0.0, 0.0, 1.0);

   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();
   gluPerspective (90, GLdouble(Width/Height), 1.0, 100.0);

   glMatrixMode (GL_MODELVIEW);
   glLoadIdentity ();
   gluLookAt (0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0);

   Application->OnIdle = AppIdle;

   X = 0; Y = -3;
   Yaw = 0; Pitch = 0;
   IsWire = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
   glViewport (0, 0, Width, Height);

   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();
   gluPerspective (90, GLdouble(Width/Height), 1.0, 100.0);

   glMatrixMode (GL_MODELVIEW);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
   if (hGLRC)
   {
      wglMakeCurrent(NULL, NULL);
      wglDeleteContext(hGLRC);
      hGLRC = NULL;
   }
   if (hDC)
   {
      ReleaseDC(Handle, hDC);
      hDC = NULL;
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AppIdle(TObject *Sender, bool &Done)
{
   Done = true;

   // Начало обработки мыши
   TPoint* temp;
   temp = new TPoint;
   ::GetCursorPos (temp);
   Yaw += (180 * (temp->x - Screen->Width/2) / Screen->Width);
   Pitch += (180 * (temp->y - Screen->Height/2) / Screen->Height);
   ::SetCursorPos (Screen->Width/2, Screen->Height/2);
   // Конец обработки мыши

   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

   glLoadIdentity ();

   gluLookAt (0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0);
   glRotatef (Pitch, 1, 0, 0);
   glRotatef (Yaw, 0, 0, 1);
   glTranslatef (-X, -Y, 0.0f);

//--------------буква "А"---------------

 glColor3f (1, 0, 0);

   glBegin(GL_LINE_STRIP);
   glVertex2i(20,50);
   glVertex2i(20,70);
   glVertex2i(40,70);
   glVertex2i(40,90);
   glVertex2i(60,90);
   glVertex2i(60,70);
   glVertex2i(80,70);
   glVertex2i(80,50);
   glEnd();

   glBegin(GL_LINE_LOOP);
   glVertex2i(20,20);
   glVertex2i(20,40);
   glVertex2i(40,40);
   glVertex2i(40,60);
   glVertex2i(60,60);
   glVertex2i(60,40);
   glVertex2i(80,40);
   glVertex2i(80,20);
   glEnd();



   glFlush ();
   SwapBuffers(hDC);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
   float FSIN = sin (Yaw*M_PI/180.0f);
   float FCOS = cos (Yaw*M_PI/180.0f);

   if (Key == VK_ESCAPE) Application->Terminate ();
   else if (Key == VK_LEFT) Yaw -= 3;
   else if (Key == VK_RIGHT) Yaw += 3;
   else if (Key == VK_UP) {X += 0.05 * FSIN; Y += 0.05 * FCOS;}
   else if (Key == VK_DOWN) {X -= 0.05 * FSIN; Y -= 0.05 * FCOS;}

   else if (Key == 'A') {X -= 0.05 * FCOS; Y += 0.05 * FSIN;}
   else if (Key == 'D') {X += 0.05 * FCOS; Y -= 0.05 * FSIN;}
   else if (Key == 'W') {X += 0.05 * FSIN; Y += 0.05 * FCOS;}
   else if (Key == 'S') {X -= 0.05 * FSIN; Y -= 0.05 * FCOS;}

   else if (Key == VK_SPACE) IsWire = !IsWire;
}
//---------------------------------------------------------------------------


*.h
Код

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <windows.h>
#include <gl.h>
#include <glu.h>
#include <math.h>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
   void __fastcall FormResize(TObject *Sender);
   void __fastcall FormDestroy(TObject *Sender);
   void __fastcall AppIdle (TObject *Sender, bool &Done);
   void __fastcall FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift);
private:    // User declarations
public:        // User declarations
   __fastcall TForm1(TComponent* Owner);

   float X, Y, Yaw, Pitch; // координаты и угол
   bool IsWire; // каркасный ли должен быть куб?
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Это сообщение отредактировал(а) saboth - 20.5.2011, 11:22

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  example.7z 203,68 Kb
PM MAIL   Вверх
Vetos
Дата 20.5.2011, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



функцию загрузки и вывода текста можешь найти здесь
Вместо хендла окна передавай хендл панельки, огл разместится на ней


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

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

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


 




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


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

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