Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2012, 18:16   #1
GAS1989
 
Регистрация: 01.05.2012
Сообщений: 7
По умолчанию Вывод текста opengl

Код:
#include <GL/glut.h>

float x1_ = -20.;
float y1_ = 0.;
float x2_ = 20.;
float y2_ = 0.;

void display()
{

  glClear(GL_COLOR_BUFFER_BIT);
  glPointSize(5);
  glBegin(GL_POINTS);
  glVertex2f(x1_,y1_);
  glVertex2f(x2_,y2_);
  glEnd();
  glutSwapBuffers();
  
}

void keyEvent(int key, int, int)
{
  switch (key)
  {
  case GLUT_KEY_LEFT:
    x1_ -= 5.;
	x2_ -= 5.;
    break;
  case GLUT_KEY_UP:
   y1_ += 5;
   y2_ += 5; 
    break;
  case GLUT_KEY_RIGHT:
    x1_ += 5.;
	x2_ += 5.;
    break;
  case GLUT_KEY_DOWN:
   y1_ -= 5;
   y2_ -= 5;    
   break;
}
}

void timer(int = 0)
{
  display();
  glutTimerFunc(10, timer, 0);
}

int main(int argc, char **argv)
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  glutInitWindowSize(400, 400);
  glutInitWindowPosition(20, 1050 - 480 - 20);
  glutCreateWindow("Points");
  glClearColor(0, 0, 0, 1.0);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho (-400, 400, -400, 400, -400, 400);
  glutDisplayFunc(display);
  glutSpecialFunc(keyEvent);
  timer();
  glutMainLoop();
}
Изучаю С++ и немного черпаю OpenGL. Как вывести отображение координат точек на экран? т.е. точки передвигаются и на экране показывается по каким координатам передвигаются.

Последний раз редактировалось GAS1989; 07.08.2012 в 18:18.
GAS1989 вне форума Ответить с цитированием
Старый 07.08.2012, 18:21   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

https://www.google.ru/search?client=...hannel=suggest
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.08.2012, 18:59   #3
GAS1989
 
Регистрация: 01.05.2012
Сообщений: 7
По умолчанию

Код:
#include <iostream>
#include <GL/glut.h>

float x1_ = -20.;
float y1_ = 0.;
float x2_ = 20.;
float y2_ = 0.;
std::string str;
std::string to_string(int val) {
 char buff[32];
 sprintf(buff,"%d",val);
 return std::string(buff);
}

std::string sText()
{
	std::string sx1,sx2,sy1,sy2;
	sx1 = to_string(x1_);
	sx2 = to_string(x2_); 
	sy1 = to_string(y1_);
	sy2 = to_string(y2_);
	str = str.empty();
	str += sx1;
	str += ",";
	str += sx2;
	str += ",";	
	str += sy1;
	str += ",";
	str += sy2;
	str += ";";
	return str;
}
void drawText(const char *text, int length, int x, int y)
{
	glMatrixMode(GL_PROJECTION);
	double *matrix = new double[16];
	glGetDoublev(GL_PROJECTION_MATRIX, matrix);
	glLoadIdentity();
	glOrtho(0,400,0,400,-5,5);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glPushMatrix();
	glLoadIdentity();
	glRasterPos2i(x,y);
	for(int i=0; i<length; i++)
	{
		glutBitmapCharacter(GLUT_BITMAP_9_BY_15,(int)text[i]);
	}
	glPopMatrix();
	glMatrixMode(GL_PROJECTION);
	glLoadMatrixd(matrix);
	glMatrixMode(GL_MODELVIEW);

}

void display()
{

  glClear(GL_COLOR_BUFFER_BIT);
  glPointSize(5);
  glBegin(GL_POINTS);
  glVertex2f(x1_,y1_);
  glVertex2f(x2_,y2_);
  glEnd();
  str = sText();
  drawText(str.data(),str.size(),10, 10);
  glutSwapBuffers();
  
}

void keyEvent(int key, int, int)
{
  switch (key)
  {
  case GLUT_KEY_LEFT:
    x1_ -= 5.;
	x2_ -= 5.;
    break;
  case GLUT_KEY_UP:
   y1_ += 5;
   y2_ += 5; 
    break;
  case GLUT_KEY_RIGHT:
    x1_ += 5.;
	x2_ += 5.;
    break;
  case GLUT_KEY_DOWN:
   y1_ -= 5;
   y2_ -= 5;    
   break;
}
}

void timer(int = 0)
{
  display();
  glutTimerFunc(10, timer, 0);
}

int main(int argc, char **argv)
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  glutInitWindowSize(400, 400);
  glutInitWindowPosition(20, 1050 - 480 - 20);
  glutCreateWindow("Points");
  glClearColor(0, 0, 0, 1.0);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho (-400, 400, -400, 400, -400, 400);
  glutDisplayFunc(display);
  glutSpecialFunc(keyEvent);
  timer();
  glutMainLoop();
}
Извините за безобразное написание кода. Нашел что-то в инете, работает. Пойду разбираться что нашел и как работает =|

Код:
void drawText(const char *text, int length, int x, int y)
{
	glMatrixMode(GL_PROJECTION);
	double *matrix = new double[16];
	glGetDoublev(GL_PROJECTION_MATRIX, matrix);
	glLoadIdentity();
	glOrtho(0,400,0,400,-5,5);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glPushMatrix();
	glLoadIdentity();
	glRasterPos2i(x,y);
	for(int i=0; i<length; i++)
	{
		glutBitmapCharacter(GLUT_BITMAP_9_BY_15,(int)text[i]);
	}
	glPopMatrix();
	glMatrixMode(GL_PROJECTION);
	glLoadMatrixd(matrix);
	glMatrixMode(GL_MODELVIEW);

}
GAS1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenGL. Функция display. Некорректный вывод dann.ftk Помощь студентам 1 16.07.2012 08:06
ввод/вывод данных с клавиатуры в opengl flaps Visual C++ 0 24.05.2011 21:07
Вывод 3d текта в OpenGl adico Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 12.05.2011 18:48
Вывод картинки через OpenGL KIV_95 Помощь студентам 1 15.08.2010 12:18
Вывод врагмента изображения на весь экран в OpenGL LMan Помощь студентам 0 13.09.2009 17:51