У меня есть много источников и пробовал много разновидностей, но масштабирование по-прежнему не работает. Я не могу изменить glprojection gluPerspective, потому что в этом случае моя программа ничего не рисует. Вот приблизительный код.GLUT масштабирование и выключение колеса
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include "glut.h"
#define windowSize 900.0
double zoomFactor = 1;
void reshape (int w, int h)
{
glViewport (0.0, 0.0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluOrtho2D (-(GLdouble) w * zoomFactor, (GLdouble) w* zoomFactor, -(GLdouble) h* zoomFactor, (GLdouble) h* zoomFactor);
}
void mouse(int button, int state, int x, int y)
{
if (button == 3 || button == 4)
{
if (state == GLUT_UP) zoomFactor += 0.05;
else zoomFactor -= 0.05;
}
else return;
glutReshapeFunc(reshape);
}
Void display(){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glVertex2f ((0),(0));
glVertex2f ((100),(0));
glEnd();
glBegin(GL_LINES);
glVertex2f ((100),(0));
glVertex2f ((100),(100));
glEnd();
glBegin(GL_LINES);
glVertex2f ((0),(0));
glVertex2f ((100),(1000));
glEnd();
glFlush();
}
int main(int argc,char** argv)
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(windowSize, windowSize);
glutInitWindowPosition(500,0);
glutCreateWindow("test");
glClearColor(0, 0.1,0.8,0.90);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, 200, 200,0);
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop(;
return(0);
}
Мой сосед был немного напуган моей обеткой речи. Масштабирование работает, но нет ответа на события кнопок 3 и 4. Может быть, некоторые проблемы с драйверами мыши? –
@SergeS: Если вы используете Linux/X11, вы можете использовать инструмент 'xev', чтобы проверить, какой указатель мыши имеет индекс. Обычно кнопки 4 и 5 являются колесиком мыши. – datenwolf
Также после добавления глобальных int mouseX, mouseY и void motion (int x, int y) {mouseX = x; mouseY = y;} и в основном glutPassiveMotionFunc (motion); и в отображении glViewport (mouseX, mouseY, glutGet (GLUT_INIT_WINDOW_WIDTH), glutGet (GLUT_INIT_WINDOW_WIDTH)); для увеличения до курсора. Я получил смехотворное поведение масштабирования и плохую перестройку, когда изображение перемещается в правый угол, если я включаю/выключаю режим полноэкранного режима. Где я должен использовать новые мышиные координаты, если не в окне просмотра, и как исправить переформатирование? –