LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

У тебя есть матрица трансформации, которая из 3Д координат даёт тебе 2Д координаты. Можно найти обратную матрицу и с её помощью делать наоборот. Но нужно ещё достать глубину пикселя под курсором с помощью, например, glGetPixels. Так как чистые 2Д координаты дадут тебе 3Д луч, а не точку.

Ещё можно взять координаты камеры и вектор направления взгляда (у тебя должны быть эти данные, чтобы построить матрицу lookAt) и идти по этому лучу небольшими шажками по миру, пока не найдёшь уже имеющийся воксель, чтобы поставить новый рядом с ним.

В любому случае, чтобы из координат мыши получить 3Д, нужно найти на какой уже имеющийся объект в сцене смотрит юзер. Как в Майнкрафте нельзя поставить куб в пустоту, только сбоку от уже имеющегося куба. Это фундаментальное ограничение двумерного указателя мыши.

Рисовать в пустоте можно только другими способами ввода (например, прямым указанием 3Д координат цифрами, либо хотя бы третью координату заставить юзера явно указывать полем ввода или каким-нибудь ползунком).

Исправление KivApple, :

У тебя есть матрица трансформации, которая из 3Д координат даёт тебе 2Д координаты. Можно найти обратную матрицу и с её помощью делать наоборот. Но нужно ещё достать глубину пикселя под курсором с помощью, например, glGetPixels. Так как чистые 2Д координаты дадут тебе 3Д луч, а не точку.

Ещё можно взять координаты камеры и вектор направления взгляда (у тебя должны быть эти данные, чтобы построить матрицу lookAt) и идти по этому лучу небольшими шажками по миру, пока не найдёшь уже имеющийся воксель, чтобы поставить новый рядом с ним.

В любому случае, чтобы из координат мыши получить 3Д, нужно найти на какой уже имеющийся объект в сцене смотрит юзер. Как в Майнкрафте нельзя поставить куб в пустоту, только сбоку от уже имеющегося куба. Это фундаментальное ограничение двумерного указателя мыши.

Рисовать в пустоте можно только другими способами ввода (например, прямым указанием 3Д координат цифрами, либо хотя бы третью координату заставить юзера явно указывать).

Исправление KivApple, :

У тебя есть матрица трансформации, которая из 3Д координат даёт тебе 2Д координаты. Можно найти обратную матрицу и с её помощью делать наоборот. Но нужно ещё достать глубину пикселя под курсором с помощью, например, glGetPixels. Так как чистые 2Д координаты дадут тебе 3Д луч, а не точку.

Ещё можно взять координаты камеры и вектор направления взгляда (у тебя должны быть эти данные, чтобы построить матрицу lookAt) и идти по этому лучу небольшими шажками по миру, пока не найдёшь уже имеющийся воксель, чтобы поставить новый рядом с ним.

В любому случае, чтобы из координат мыши получить 3Д, нужно найти на какой уже имеющийся объект в сцене смотрит юзер. Как в Майнкрафте нельзя поставить куб в пустоту, только сбоку от уже имеющегося куба. Это фундаментальное ограничение двумерного указателя мыши.

Рисовать в пустоте можно только другими способами ввода (например, прямым указанием 3Д координат цифрами).

Исправление KivApple, :

У тебя есть матрица трансформации, которая из 3Д координат даёт тебе 2Д координаты. Можно найти обратную матрицу и с её помощью делать наоборот. Но нужно ещё достать глубину пикселя под курсором с помощью, например, glGetPixels. Так как чистые 2Д координаты дадут тебе 3Д луч, а не точку.

Ещё можно взять координаты камеры и вектор направления взгляда (у тебя должны быть эти данные, чтобы построить матрицу lookAt) и идти по этому лучу небольшими шажками по миру, пока не найдёшь уже имеющийся воксель, чтобы поставить новый рядом с ним.

В любому случае, чтобы из координат мыши получить 3Д, нужно найти на какой уже имеющийся объект в сцене смотрит юзер. Как в Майнкрафте нельзя поставить куб в пустоту, только сбоку от уже имеющегося куба. Это фундаментальное ограничение двумерного указателя мыши.

Исправление KivApple, :

У тебя есть матрица трансформации, которая из 3Д координат даёт тебе 2Д координаты. Можно найти обратную матрицу и с её помощью делать наоборот. Но нужно ещё достать глубину пикселя под курсором с помощью, например, glGetPixels. Так как чистые 2Д координаты дадут тебе 3Д луч, а не точку.

Ещё можно взять координаты камеры и вектор направления взгляда (у тебя должны быть эти данные, чтобы построить матрицу lookAt) и идти по этому лучу небольшими шажками по миру, пока не найдёшь уже имеющийся вексель, чтобы поставить новый рядом с ним.

В любому случае, чтобы из координат мыши получить 3Д, нужно найти на какой уже имеющийся объект в сцене смотрит юзер. Как в Майнкрафте нельзя поставить куб в пустоту, только сбоку от уже имеющегося куба. Это фундаментальное ограничение двумерного указателя мыши.

Исходная версия KivApple, :

У тебя есть матрица трансформации, которая из 3Д координат даёт тебе 2Д координаты. Можно найти обратную матрицу и с её помощью делать наоборот. Но нужно ещё достать глубину пикселя под курсором с помощью, например, glGetPixels. Так как чистые 2Д координаты дадут тебе 3Д луч, а не точку.