Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помощь нужна, по шрафтам в OpenGL + C++Builder, ^) 
:(
    Опции темы
Elfet
  Дата 8.8.2004, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Код
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <stdio.h>
#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
#include <math.h>
#include <stdarg.h>



//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tf *f;

HGLRC hGLRC;
HDC   hDC;
//---------------------------------------------------------------------------
GLint base;
GLYPHMETRICSFLOAT gmf[256];
GLvoid BuildFont(GLvoid);
//INITGL************************************************************************
__fastcall Tf::Tf(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 ();

  GLfloat _mainlight[] = {0.3, 0.3, 0.3, 1.0};
  GLfloat _lposition[] = {0.0, 0.0, 8.0, 1.0};
  GLfloat _lambient[] = {0.5, 0.5, 0.5, 1.0};
  GLfloat _ldiffuse[] = {1.0, 1.0, 1.0, 1.0};
  GLfloat _lspecular[] = {1.0, 1.0, 1.0, 1.0};

  glEnable (GL_ALPHA_TEST);
  glEnable (GL_DEPTH_TEST);
  glEnable (GL_NORMALIZE);

  glEnable (GL_COLOR_MATERIAL);
  glColorMaterial (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);


  glEnable (GL_LIGHTING);
  glEnable (GL_LIGHT0);

  glLightModelfv (GL_LIGHT_MODEL_AMBIENT, _mainlight);
  glLightfv (GL_LIGHT0, GL_POSITION, _lposition);
  glLightfv (GL_LIGHT0, GL_AMBIENT, _lambient);
  glLightfv (GL_LIGHT0, GL_DIFFUSE, _ldiffuse);
  glLightfv (GL_LIGHT0, GL_SPECULAR, _lspecular);

  //glViewport (0, 0, 800, 600);
  glClearColor (0.0, 0.0, 0.0, 1.0);

  BuildFont();

  GLuint filter;
  GLuint fogMode[]= { GL_EXP, GL_EXP2, GL_LINEAR };
  GLuint fogfilter= 2;
  GLfloat fogColor[4]= {0.0f, 0.0f, 0.0f, 1.0f};

  glEnable(GL_FOG);
  glFogi(GL_FOG_MODE, fogMode[fogfilter]);
  glFogfv(GL_FOG_COLOR, fogColor);
  glFogf(GL_FOG_DENSITY, 0.55f);
  glHint(GL_FOG_HINT, GL_DONT_CARE);
  glFogf(GL_FOG_START, 1);
  glFogf(GL_FOG_END, 10);

  glMatrixMode (GL_PROJECTION);
  glLoadIdentity ();
  gluPerspective (90, GLdouble(4.0/3.0), 1.0, 30.0);

  glMatrixMode (GL_MODELVIEW);
  glLoadIdentity ();

  x=y=z=0;
}
//---------------------------------------------------------------------------
float GradToRadians(float grad)
{
   return grad*0.017453292519943295769;
}
GLvoid BuildFont(GLvoid)
{
HFONT  font;
font = CreateFont(-12,          // âûñîòà øðèôòà

             0,            // øèðèíà çíàêîìåñòà
             0,            //Óãîë ïåðåõîäà
             0,            //Óãîë íàïðàâëåíèÿ
             FW_BOLD,              //Øèðèíà øðèôòà
             FALSE,        // Êóðñèâ
             FALSE,        // Ïîä÷åðêèâàíèå
             FALSE,        // Ïåðå÷åðêèâàíèå
             ANSI_CHARSET,       //Èäåíòèôèêàòîð êîäèðîâêè
             OUT_TT_PRECIS,       // Òî÷íîñòü âûâîäà
             CLIP_DEFAULT_PRECIS,       //Òî÷íîñòü îòñå÷åíèÿ
             ANTIALIASED_QUALITY,// Êà÷åñòâî âûâîäà
             FF_DONTCARE|DEFAULT_PITCH, // Ñåìåéñòâî è Øàã
             "Courier");          // Èìÿ øðèôòà
SelectObject(hDC, font);       //Âûáðàòü øðèôò, ñîçäàííûé íàìè
wglUseFontOutlines( hDC,         // Âûáðàòü òåêóùèé êîíòåêñò óñòðîéñòâà (DC)
                   0,            // Ñòàðòîâûé ñèìâîë
                   255,          // Êîëè÷åñòâî ñîçäàâàåìûõ ñïèñêîâ îòîáðàæåíèÿ
                   base,         // Ñòàðòîâîå çíà÷åíèå ñïèñêà îòîáðàæåíèÿ
                   0.0f,       //Îòêëîíåíèå îò íàñòîÿùåãî êîíòóðà
                   0.2f,       //Òîëùèíà øðèôòà ïî îñè Z
                   WGL_FONT_POLYGONS,       //Èñïîëüçîâàòü ïîëèãîíû, à íå ëèíèè
                   gmf );       //áóôåð àäðåñà äëÿ äàííûõ ñïèñêà îòîáðàæåíèÿ

}
GLvoid KillFont(GLvoid){glDeleteLists(base, 256);}
GLvoid glPrint(const char *fmt, ...)
{
 char    text[256];
 va_list    ap;
 if (fmt == NULL)return;
 va_start(ap, fmt);
     vsprintf(text, fmt, ap);
 va_end(ap);
 glPushAttrib(GL_LIST_BIT);
 glListBase(base);
 glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);
 glPopAttrib();
}

void __fastcall Tf::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 Tf::FormDestroy(TObject *Sender)
{
  if (hGLRC)
  {
     wglMakeCurrent(NULL, NULL);
     wglDeleteContext(hGLRC);
     hGLRC = NULL;
  }
  if (hDC)
  {
     ReleaseDC(Handle, hDC);
     hDC = NULL;
  }
KillFont();          
}
//---------------------------------------------------------------------------
void __fastcall Tf::TimerMainDrawTimer(TObject *Sender)
{
if(keys[37])ygol-=2;
if(keys[39])ygol+=2;
if(keys[38]){
z+=sin(GradToRadians(ygol))*0.02;
x+=cos(GradToRadians(ygol))*0.02;
}
if(keys[40]){
z-=sin(GradToRadians(ygol))*0.02;
x-=cos(GradToRadians(ygol))*0.02;
}


glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity ();

glTranslatef (0, -1, -1.5);
glRotatef (-90, 0, 1, 0);

GLUquadricObj *gu2;
gu2=gluNewQuadric();
gluQuadricDrawStyle(gu2, GLU_FILL);
glColor4f(0.2, 0.9, 0.4, 0.1);
glTranslatef (0, 0.09, 0);
gluSphere(gu2, 0.1, 20, 20);
glTranslatef (0, -0.09, 0);
delete gu2;


glRotatef (ygol, 0, 1, 0);
glTranslatef(x, y, z);

glRotatef (90, 1, 0, 0);
GLUquadricObj *gu;
gu=gluNewQuadric();
gluQuadricDrawStyle(gu, GLU_LINE);
glColor4f(0.5, 0.5, 0.4, 1.0);
gluDisk(gu, 1, 100, 100, 100);
glPrint("!www");  //                                      НЕ работает
delete gu;

glFlush ();
SwapBuffers(hDC);
}
//---------------------------------------------------------------------------
void __fastcall Tf::FormKeyDown(TObject *Sender, WORD &Key,
     TShiftState Shift)
{
keys[Key] = true;
}
//---------------------------------------------------------------------------
void __fastcall Tf::FormKeyUp(TObject *Sender, WORD &Key,
     TShiftState Shift)
{
keys[Key] = false;
}


здесь функция glPrint неработает, в других местах эта же функция работает


--------------------
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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