Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

OpenGL:Простроение 3D графиков

8.4K
12 октября 2006 года
SmK
1 / / 02.09.2004
Проблемы:
1. Величина видимого обзора очень мала, при отдалении на расстояние график просто исчезает
gluPerspective(0,1,0,100000.0f); - никакого эффекта

2. Непонятно как настроить вид, если график находитсяс не в пределах (-1,-1,-1)-(1,1,1), а допустим
в пределах (40,80,40)-(120,100,150)
Функция gluLookAt не очень помогает, отчасти из за первой проблемы,т.е.
gluLookAt(0,0,0,400,400,400,0,0,1); - ничего не видно, и вообще увеличение 3,4 и 5 параметров не даёт никакого визуального эффекта

3. Как выводить текст с помощю OpenGL ?(желательно попроще, без сторонних библиотек)
Спасибо тем, кто откликнется !
21K
15 октября 2006 года
msvc++
2 / / 15.10.2006
А чем тебе не понравился ответ на форуме на sources.ru ?
8.2K
16 октября 2006 года
Akela
64 / / 13.05.2005
1+2. Попробуй использовать вместо перпективной проекции ортографическую (glOrtho).
3. Что касается вывода текста... На мой взгляд самый простой способ - использование функции wglUseFontBitmaps. Вот пример класса, предназначенного для работы с текстом:

#ifndef TFontH
#define TFontH

#include <windows.h>

typedef struct
{
int Height;
int Weight;
DWORD Italic;
DWORD Underline;
DWORD StrikeOut;
char *Name;
float Color[4];
} TFontInfo;

class TFont
{
HFONT _Font;
UINT _Offset;
int _Size;

public:
TFont(void);
TFont(TFontInfo &fontInfo);
~TFont(void);

__declspec (property(get = GetSize)) int Size;

int __fastcall GetSize(void)
{
return -_Size;
}

float Color[4];

bool __fastcall New (TFontInfo &info);
void __fastcall Delete(void);
void __fastcall DrawText(int x, int y, char *text); // вывод текста в экранных координатах (x, y)
void __fastcall DrawAlignedText(UINT horAlign, UINT verAlign, int x, int y, char *text); // вывод текста в экранных координатах (x, y) с выравниванием
};

#endif

#include "TFont.h"
#include "gl\gl.h"

TFont::TFont(void)
{
_Font = NULL;
_Offset = 0;
_Size = 0;
Color[0] = 1.0;
Color[1] = 1.0;
Color[2] = 1.0;
Color[3] = 1.0;
}

TFont::TFont(TFontInfo &fontInfo)
{
New(fontInfo);
}

TFont::~TFont(void)
{
Delete();
}

bool __fastcall TFont::New (TFontInfo &info)
{
Color = info.Color;
_Size = -MulDiv(GetDeviceCaps(wglGetCurrentDC(), LOGPIXELSY), info.Height, 72);
_Font = CreateFont(_Size, 0, 0, 0, info.Weight, info.Italic, info.Underline, info.StrikeOut, 204, 3, 2, 1, 34, info.Name);
_Offset = glGenLists(256);

SelectObject(wglGetCurrentDC(), _Font);
wglUseFontBitmaps(wglGetCurrentDC(), 0, 256, _Offset);

return true;
}

void __fastcall TFont::Delete(void)
{
DeleteObject(_Font);
glDeleteLists(_Offset, 256);
}

void __fastcall TFont::DrawText(int x, int y, char *text)
{
glListBase(_Offset);
glColor4fv(Color);
glWindowPos2iARB(x, y);
glDisable(GL_DEPTH_TEST);
glPushAttrib(GL_BLEND);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glCallLists(GLsizei(strlen(text)), GL_UNSIGNED_BYTE, text);
glDisable(GL_BLEND);
glPopAttrib();
glEnable(GL_DEPTH_TEST);
}

void __fastcall TFont::DrawAlignedText(UINT horAlign, UINT verAlign, int x, int y, char *text)
{
SIZE Size;

SelectObject(wglGetCurrentDC(), _Font);
GetTextExtentPoint32(wglGetCurrentDC(), text, int(strlen(text)), &Size);

if (horAlign == TA_RIGHT)
x = x - (int)Size.cx;
else
if (horAlign == TA_CENTER)
x = x - (int)Size.cx / 2;

if (verAlign == TA_TOP)
y = y - (int)Size.cy;
else
if (verAlign == TA_CENTER)
y = y - (int)Size.cy / 2;

glListBase(_Offset);
glColor4fv(Color);
glWindowPos2iARB(x, y);
glDisable(GL_DEPTH_TEST);
glPushAttrib(GL_BLEND);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glCallLists(GLsizei(strlen(text)), GL_UNSIGNED_BYTE, text);
glDisable(GL_BLEND);
glPopAttrib();
glEnable(GL_DEPTH_TEST);
}
23K
30 октября 2006 года
night
1 / / 29.10.2006
Есть проблема с построением 3D графика (OpenGL+VC). Проблема заключается в том, что насчитанных точек мало (4*4). Поэтому график получается угловатым. Необходимо его сгладить. Подходящих стандартных функций ненашел. Писать самому расчетов много. А поверхности безье неподходят, они через заданные точки только по краям проходят, а центральные только для ориентира.

Подскажите может что есть ведь нельзя же так всё время все на глаз безье подгонять.:(
19K
03 ноября 2006 года
ershovdz
3 / / 28.08.2006
Ну если ты хочешь чтобы график гладенько выглядел - возьми в каждой точке усредненную по соседним точкам нормаль ! Тогда граней видно не будет . И расчетов вроде не много. Вот например смотри аттач
63
07 ноября 2006 года
Zorkus
2.6K / / 04.11.2006
Вообще сначала математически проанализируй, а потом решай вопрос с визуализацией:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог