Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: [OpenGL] Ошибка в auxInitWindow  (Прочитано 12684 раз)
0 Пользователей и 1 Гость смотрят эту тему.
KrL
Участник

ru
Offline Offline

« : 11-05-2009 14:14 » 

В общем какая-то странная ошибка.. Пишу код для вывода конуса:

Код:
#include <windows.h>

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
#include "stdlib.h"
double R = 1, H = 2;

void CALLBACK Key_UP(void)
{
R = R + 0.2;
H = H + 0.4;
}
void CALLBACK Key_DOWN(void)
{
R = R - 0.2;
H = H - 0.4;
}
void DrawCone()
{
glPushMatrix();     // сохраняем текущие координаты
glTranslated(0.1,0,0);  // сдвигаемся в точку (2,0,0)
glRotated(-75, 0.1,0,0); // поворачиваем систему координат
glColor3d(0,1,0);
auxWireCone(R, H);   // рисуем конус
glPopMatrix();     // возвращаемся к старым координатам
}



void CALLBACK resize(int width,int height)
{
   glViewport(0,0,width,height);
   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 CALLBACK display(void)
{
 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
 DrawCone();
 auxSwapBuffers();
}


void main()
{
float pos[4] = {3,3,3,1};
float dir[3] = {-1,-1,-1};

    GLfloat mat_specular[] = {1,1,1,1};

    auxInitPosition( 50, 10, 400, 400);
    auxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE );
    auxInitWindow( "Glaux Template" );
    auxIdleFunc(display);
    auxReshapeFunc(resize);

auxKeyFunc(AUX_UP, Key_UP);
auxKeyFunc(AUX_DOWN, Key_DOWN);


 
    glEnable(GL_DEPTH_TEST);

    glEnable(GL_COLOR_MATERIAL);

    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);

    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);

    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    glMaterialf(GL_FRONT, GL_SHININESS, 128.0);


    /*
    * Enter your cod here
    */
    auxMainLoop(display);
}

Далее создаю новый .cpp для цилиндра, копипаст меняю функцию вывода конуса на ф-ю для цилиндра и вылетает..
 
Код:
error C2664: 'auxInitWindowW' : cannot convert parameter 1 from 'const char [15]' to 'LPCWSTR'

Код:
#include <windows.h>

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
#include "stdlib.h"
double  r = 1,height = 1;

void CALLBACK Key_UP(void)
{
height = height + 0.5;

r = r + 0.4;
}
void CALLBACK Key_DOWN(void)
{
height = height - 0.5;
r = r - 0.4;
}
void DrawCylinder()
{
glPushMatrix();     // сохраняем текущие координаты
glTranslated(0.1,0,0);  // сдвигаемся в точку (2,0,0)
glRotated(15, 0.1,0,0); // поворачиваем систему координат
glColor3d(0,1,0);
auxSolidCylinder(r,height);  // рисуем
glPopMatrix();     // возвращаемся к старым координатам
}





void CALLBACK resize(int width,int height)
{
   glViewport(0,0,width,height);
   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 CALLBACK display(void)
{
 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
 DrawCylinder();
 auxSwapBuffers();
}


void main()
{
float pos[4] = {3,3,3,1};
float dir[3] = {-1,-1,-1};

    GLfloat mat_specular[] = {1,1,1,1};

    auxInitPosition( 50, 10, 400, 400);
    auxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE );
    auxInitWindow( "Glaux Template" );
    auxIdleFunc(display);
    auxReshapeFunc(resize);

auxKeyFunc(AUX_UP, Key_UP);
auxKeyFunc(AUX_DOWN, Key_DOWN);


 
    glEnable(GL_DEPTH_TEST);

    glEnable(GL_COLOR_MATERIAL);

    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);

    glLightfv(GL_LIGHT0, GL_POSITION, pos);
    glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);

    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    glMaterialf(GL_FRONT, GL_SHININESS, 128.0);


    /*
    * Enter your cod here
    */
    auxMainLoop(display);
}
В чем причина? Основа кода из учебника тарасова по OpenGL. Пишу в VS 2005
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 11-05-2009 14:59 » 

Ну он тебе и написал, что в функции auxInitWindow, нельзя вставлять константную нуль терминальную строку. Это скажем так, издержки планирования библиотек. А нужна ему ссылка на строку. Попробуй типа этого.
Код:
char ch[] =  "Glaux Template";
auxInitWindow( ch );
или поиграться с приведением типов.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 11-05-2009 15:12 » 

Finch, там ещё на типы нужно обратить внимание. У него в сборке стоит использование юникода, а в функцию, похоже, передаётся совсем не юникодная строка.
Записан
KrL
Участник

ru
Offline Offline

« Ответ #3 : 11-05-2009 15:20 » 

Мне интересно почему в 1-м случае работает а в другом нет, хотя код практически одинаковый
Finch
Все равно error C2664: 'auxInitWindowW' : cannot convert parameter 1 from 'char [15]' to 'LPCWSTR'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
« Последнее редактирование: 11-05-2009 15:24 от KrL » Записан
KrL
Участник

ru
Offline Offline

« Ответ #4 : 11-05-2009 15:52 » 

Я ф шоке. Не работает из-за того что создал файл .срр, поменял на .с скомпилировалась
Или надо поставить 'L'- auxInitWindow( L"Glaux Template" );
« Последнее редактирование: 11-05-2009 15:55 от KrL » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 11-05-2009 16:16 » 

KrL, Все правильно, ты должен явно указать, что строка юникодовская. На каждый символ отводится 2 байта, а не 1 как в кодировке CP1251.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines