Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
3 / 5 / 0
Регистрация: 09.12.2012
Сообщений: 104

OpenGL: ошибка в библиотеке glut.h

27.10.2013, 14:33. Показов 2820. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скачал исходник проекта для билдера (но билдером не открывается ... нет файла проекта) с openGL-ем: там в окошке рисуется красная сфера (она вращается).

Решил повторить в точности эту программу. Создал новый проект в билдере. Скопировал в рабочую папку библиотеку glut.h и прочие. Скопировал в проект содержимое файлов .cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
//---------------------------------------------------------------------------
 
#include <vcl.h>
 
//#include <gl\gl.h>                // Заголовочные файлы для библиотеки OpenGL32
//#include <gl\glu.h>              // Заголовочные файлы для библиотеки GLu32
//#include <gl\glaux.h>
#include <gl\glut.h>
 
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
  HGLRC ghRC;
  HDC   ghDC;
  void Draw();
 
 
 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;//формат указания цвета. Может принимать значения
    // PFD_TYPE_RGBA (цвет указывается четырьмя параметрами
    //RGBA - красный, зленный, синий и альфа) и PFD_TYPE_COLORINDEX (цвет указывается
    // индексом в палитре).
    ppfd->cColorBits = 16;//глубина цвета
    ppfd->cDepthBits = 16;//размер буфера глубины (Z-Buffer)
 
    ppfd->cAccumBits = 0;
    ppfd->cStencilBits = 0;//размер буфера трафарета (мы его пока не используем)
 
    //ЧузПикселФормат подбирает формат пикселей, максимально удовлетворяющий нашим требованиям,
    //и возвращает его дескриптор, а SetPixelFormat() устанавливает его в контексте устройства
    // (dc).
    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;
      }
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
  glViewport( 0, 0, Width, Height );
  //glViewport(0,0,300,300);
  glMatrixMode( GL_PROJECTION );
  glLoadIdentity();
  glOrtho(-5,5, -5,5, 2,12);
  gluLookAt(0,0,5, 0,0,0, 0,1,0);
  glMatrixMode( GL_MODELVIEW );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
     {
  ghDC = GetDC(Handle);//??
  if (!bSetupPixelFormat(ghDC))
      Close();
  //После того как в контексте устройства установлен формат пикселей, нужно создать
  // контекст воспроизведения (Rendering Context) для этого в OpenGL определены
  //следующие функции:
  //HGLRC wglCreateContext(HDC hdc);
  //BOOL wglMakeCurrent(HDC hdc, HGLRC hglrc);
 
  ghRC = wglCreateContext(ghDC);
  wglMakeCurrent(ghDC, ghRC);
 
  glClearColor(0.0, 0.0, 0.0, 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);
      }
}
//-----------------------------function-------------------------------------------
void Draw()
      {
  glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);
 
  GLUquadricObj *quadObj;
  quadObj=gluNewQuadric();
 
  gluQuadricDrawStyle(quadObj, GLU_FILL);
  glColor3f(1,0,0);
  gluSphere(quadObj, 2,10,10);
    glRotatef(3, 0,1,0);
  gluDeleteQuadric(quadObj);
 
  SwapBuffers(ghDC);
      }
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if(ghRC)
     {
          wglMakeCurrent(ghDC,0);
          wglDeleteContext(ghRC);
     }
          if(ghDC)
          ReleaseDC(Handle, ghDC);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Draw();
}
//---------------------------------------------------------------------------
и .h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TTimer *Timer1;
    void __fastcall FormResize(TObject *Sender);
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
    void __fastcall Timer1Timer(TObject *Sender);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
При компиляции выдает ошибку:

[C++ Error] glut.h(146): E2337 Only one of a set of overloaded functions can be "C"

Выделяет красным в файле glut.h строчку

C++
1
extern _CRTIMP void __cdecl exit(int);
Вот скрин:

http://www.fotolink.su/v.php?i... 8cb2331a75

В конце концов должно получиться следующее:

http://www.fotolink.su/del.php... 26d18b15b5
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2013, 14:33
Ответы с готовыми решениями:

OpenGL glut.h
Помогите настроить с++ builder библиотеку glut.h я скачал файлы с официального сайта opengl32.dll glut32.dll glu32.dll glut32.dll ...

Ошибка GLUT (OpenGL)
Переписывал с видеоурока код, чем больше писал, тем больше ошибок такого типа: &quot;Game1.exe&quot; (Win32). Загружено...

Ubuntu + OpenGL(GLUT) = ошибка
Господа, крайне нужна ваша помощь. Взялся программировать opengl на g++, установил glut, все как положено. Одно НО, при компиляции...

10
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.10.2013, 14:53
Посмотри я где-то постил в темах по прикрутке glut к Builder.
0
3 / 5 / 0
Регистрация: 09.12.2012
Сообщений: 104
27.10.2013, 19:43  [ТС]
Нашел ту ветку:
RAD Studio XE2 и OpenGL
Сейчас попробую сделать, как там ^ ^
0
3 / 5 / 0
Регистрация: 09.12.2012
Сообщений: 104
05.11.2013, 00:03  [ТС]
=) ничего так и не получилось=)
0
3 / 5 / 0
Регистрация: 09.12.2012
Сообщений: 104
08.11.2013, 01:02  [ТС]
Я перепробовал уже примеров 10 - ничего не рисуется или не компилится ... . Нет уже сил и времени чего-то непонятное делать. Может кто-нибудь выложить билдеровский проект (с формой или без - лиж бы в окошке выводилась картинка =), и я мог бы там отрисовать черта лысого хоть по пиксельно) - именно проект, а не код (чтобы его можно было взять да открыть через open project ... )? Пожалуйста.

Добавлено через 7 минут
Есть еще идея ... мне надо рисовать в окошке - уже не важно в каком. Мож сделать отдельную прогу, например, уже в вижуале. Там замутить этот опенЖИЭЛЬ рендеринг. С помощью программы, написанной в билдере запускать ту, что написана в вижуале, и каким-то образом передавать данные между ними. Опен ЖИЭЛЬ нарисует картинку - ее запоминаем, отправляем билдеровской проге, отрисовываем в Image и все готово!

Как такая идея? Как лучше передавать картинку между приложениями?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
08.11.2013, 09:23
Цитата Сообщение от Gendalf147 Посмотреть сообщение
Может кто-нибудь выложить билдеровский проект
Вот вам совершенно дьявольский кусок проекта, который балуется с некоторыми параметрами отрисовки вращающейся сферы. Короче издевательство над уроками NeHe.
Скачать без смс: SatanOpenGLSphere.rar

Цитата Сообщение от Gendalf147 Посмотреть сообщение
Как такая идея?
Хреново.
Цитата Сообщение от Gendalf147 Посмотреть сообщение
Как лучше передавать картинку между приложениями?
Bitmap наверное.
0
 Аватар для name?
201 / 172 / 52
Регистрация: 01.06.2010
Сообщений: 371
08.11.2013, 10:18
всего-то нужно было поискать... тыц
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.11.2013, 14:42
Цитата Сообщение от Gendalf147 Посмотреть сообщение
Нашел ту ветку:
RAD Studio XE2 и OpenGL
Сейчас попробую сделать, как там ^ ^
О_у там исходники проекта и указания что пробовать ?
0
3 / 5 / 0
Регистрация: 09.12.2012
Сообщений: 104
08.11.2013, 23:54  [ТС]
Пробовал ... ведь не помогло же. Сейчас копаюсь в "совершенно дьявольском куске проекта" ... удаляю элементы ActiveDAQ, которых надо подгрузить (а какие хз) ... иначе не запустить. Сейчас все лишнее вырву из проекта ...

Кстати, у меня билдер 2006-й и он еще портабельный!

Добавлено через 1 час 6 минут
До проверки работоспособности не дошло дело ...

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
О_у там исходники проекта и указания что пробовать ?
оу а там не Builder 6
0
09.11.2013, 00:03

Не по теме:

Цитата Сообщение от Gendalf147 Посмотреть сообщение
оу а там не Builder 6
И главное не BorlandC v3 ...

0
3 / 5 / 0
Регистрация: 09.12.2012
Сообщений: 104
09.11.2013, 14:39  [ТС]
Что же поделаешь ... у всех все работает почему-то, а вот у меня нет. *****

Добавлено через 13 часов 52 минуты
При очередной попытке вышло следующее:

[Linker Error] Unresolved external 'TForm1::' referenced from D:\TEST1\PROJECT1.OBJ

код тот, который находится по ссылке, мол который я должен найти...

Добавлено через 37 секунд
(7й пост)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.11.2013, 14:39
Помогаю со студенческими работами здесь

Ошибка при запуске: Точка входа в процедуру glRotatef не найдена в библиотеке DLL C:\Windows\System32\glut.dll
Нужна помощь что уже только не делал, все равно не работает. Пытаюсь создать игру змейку по примеру из интернета. Написал окно но не...

OpenGL - VS2008 Инициализация OpenGL (Glut)
Правильно ли я написал код для выведения 3d изображения на экран? Вот пару недель наверно искал метод - можно ли окно как то создать без...

C++ и opengl(glut)
Всем доброго времени суток, решил разобраться с opengl на с++, пользую ms express c++ 2010, установил glut, написал следующий код: ...

OpenGL, Glut
#include &quot;stdafx.h&quot; #include &lt;cstdlib&gt; #include &lt;GL/glut.h&gt; const int SER_COUNT = 240; int r() { int r = 0; for (int i =...

OpenGL, библиотека glut
Уважаемые программисты где скачать библиотеку OpenGL? glut.h


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru