Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GL_POINTS в OPEN GL, Написание программы при пом. GL_POINTS 
:(
    Опции темы
Piff
Дата 7.9.2012, 04:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.3.2009

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



Помогите пожалуйста решить вопрос с написанием программы для университета. Нужно в OpenGL на С++ написать моё имя при помощи функции GL_POINTS. Я так понимаю, что даная функция выводит только лишь точки, координаты которых я сам и задаю. Но вот как сделать имя? Помогите написать только имя, остальное я сам допишу.

 Так же, подскажите, как нарисовать простые фигуры, такие как: круг, звезда, треугольник и трапеция.

 Спасибо большое за помощь. Я уже написал основу для программы:

Код

# include<gl\glut.h>

void Draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0, 0.0, 0.0);
    glBegin(GL_POINTS);
        glVertex2f(0.0, 0.0);
    glEnd();
    glFlush();
}
void Initialize()
{
    glClearColor(0.8, 1.0, 0.6, 1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-200.0, 200.0, -200.0, 200.0, -5.0, -5.0);
}

int main (int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowSize(400,400);
    glutInitWindowPosition(100, 200);
    glutCreateWindow("Lab # 01");
    glutDisplayFunc(Draw);
    Initialize();
    glutMainLoop();
    return 0;
}



PM MAIL   Вверх
LeonidPr
Дата 7.9.2012, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

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



Код

glBegin(GL_POINTS);
  glVertex3f(x1,y1,z1);
  glVertex3f(x2,y2,z2);
  ...
glEnd();


ну и так далее, набирая из точек все что угодно. Хотя лучше наверное будет линиями это сделать. Точки разрозненно будут выглядеть.
Умея рисовать точки, вы можете набрать ими все что вам угодно. Просто подставляйте нужные координаты.
А фигуры то же рисуются по координатам углов.

Код

glBegin(GL_LINES);

  glVertex3f(-10,-10,0);
  glVertex3f(0,10,0);

  glVertex3f(0,10,0);
  glVertex3f(10,-10,0);

  glVertex3f(10,-10,0);
  glVertex3f(-10,-10,0);

glEnd();

Это треугольник. дальше думаю сами сделаете.
Вспомните как в школе на Бейсике рисовали, тут почти что так же, можете взять листочек с карандашом и сначала расставить координаты точек для нужной вам фигуры, а потом запихать их в glVertex.

Добавлено через 7 минут и 1 секунду
P.S.Давно в OpenGL ничего не делал. пример с треугольником компактнее будет сделать через GL_LINE_STRIP.

Это сообщение отредактировал(а) LeonidPr - 7.9.2012, 07:52
--------------------
pkunzip.zip
PM MAIL   Вверх
Piff
Дата 7.9.2012, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.3.2009

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



Так это было бы легко, нам нужно только точки использовать и сделать прямую из точек пр помощи алгоритма Брезенхэма. Я не знаю как его реализовать в OpenGL. Хотя я пытался через цикл выкрутиться, программа вообще не показывает точки :(
PM MAIL   Вверх
LeonidPr
Дата 7.9.2012, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

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



Так, вопрос: вам в задании сказано OpenGL использовать, или это вы сами решили? Просто имхо, это извращение - реализовывать алгоритм Брезенхэма в OpenGL. Просто в окошке с использованием GDI я еще понимаю.
А вообще какая разница, как рисовать точку. Сделайте функцию DrawPoint(float x, float y). И при реализации алгоритма рисования линии когда нужно поставить пиксел, вызывайте эту функцию с нужными координатами.
--------------------
pkunzip.zip
PM MAIL   Вверх
Piff
Дата 7.9.2012, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.3.2009

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



В задании сказано. Я учусь в университете в США. Вот так нас тут гоняют smile))
Я пытался через for выкрутится, не работает :(
for (int i=-0.85; i=0.85; i+=0.01)
glVertex2f(i, 0);
glVertex2f(0, i);

Но он почему-то не рисует. Почему делаю 0.01, так как у меня окно 1000 на 1000, но точка с координатой 1, 1 вылезает за окно. Работаю с тысячными, не знаю поему.

Помогите пожалуйста реализовать этот алгоритм.

Вот он есть на С++, но как переделать его???

Код

void drawLine(int x1, int y1, int x2, int y2) {
    const int deltaX = abs(x2 - x1);
    const int deltaY = abs(y2 - y1);
    const int signX = x1 < x2 ? 1 : -1;
    const int signY = y1 < y2 ? 1 : -1;
    //
    int error = deltaX - deltaY;
    //
    setPixel(x2, y2);
    while(x1 != x2 || y1 != y2) {
        setPixel(x1, y1);
        const int error2 = error * 2;
        //
        if(error2 > -deltaY) {
            error -= deltaY;
            x1 += signX;
        }
        if(error2 < deltaX) {
            error += deltaX;
            y1 += signY;
        }
    }
 
}

PM MAIL   Вверх
tzirechnoy
Дата 7.9.2012, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

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



Цитата
for (int i=-0.85; i=0.85; i+=0.01)


int i =-0.85 -- это очень херовая идея.

PM MAIL   Вверх
Alexeis
Дата 7.9.2012, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



Не знаю можно ли вам так делать, но я бы отренедерил текст на битмапе средствами GDI, затем прошелся по массиву пикселей битмапа и там где цвет пикселя отличается от белого поставил бы соответствующую точку.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Piff
Дата 8.9.2012, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.3.2009

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



Так кто-нибудь может помочь переписать алгоритм с С++ на OpenGL?
PM MAIL   Вверх
Amp
Дата 8.9.2012, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 2
Всего: 17



Так а в чем проблема я так и не понял? Устанавливаешь ортографическую проекцию в координатах окна (left = 0, right = width, bottom = 0, top = height) и рисуешь точки в этих координатах, словно у тебя GDI какой-нибудь.
PM MAIL   Вверх
LeonidPr
Дата 8.9.2012, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

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



Я же написал про функцию DrawPoint(float x, float y). В вашем коде её роль выполняет SetPixel.
Код

void SetPixel(int x, int y) {
  glVertex3f(x,y,0);
}


Попробуйте!
--------------------
pkunzip.zip
PM MAIL   Вверх
Piff
Дата 8.9.2012, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.3.2009

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



Я в СИ почти не разбираюсь. Вы не могли бы с кодом подсказать, пожалуйста?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

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


 




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


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

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