Для отображения вокселей в трехмерном пространстве без использования Unity или других подобных движков, можно написать код на языке программирования с использованием OpenGL.
Вот пример кода на языке Python, использующего библиотеку PyOpenGL, для рисования одиночной точки (вокселя) в 3D пространстве при нажатии кнопки мыши:
```python
import glfw
from OpenGL.GL import *
from OpenGL.GLUT import *
def draw_voxel(x, y, z):
glBegin(GL_POINTS)
glVertex3f(x, y, z)
glEnd()
def mouse_button_callback(window, button, action, mods):
if (button == glfw.MOUSE_BUTTON_LEFT and action == glfw.PRESS):
xpos, ypos = glfw.get_cursor_pos(window)
viewport = glGetIntegerv(GL_VIEWPORT)
modelview = glGetDoublev(GL_MODELVIEW_MATRIX)
projection = glGetDoublev(GL_PROJECTION_MATRIX)
winX = int(xpos)
winY = int(viewport[3] - ypos)
winZ = glReadPixels(winX, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT)
posX, posY, posZ = gluUnProject(winX, winY, winZ, modelview, projection, viewport)
draw_voxel(posX, posY, posZ)
def init():
glClearColor(0.0, 0.0, 0.0, 1.0)
glClearDepth(1.0)
glEnable(GL_DEPTH_TEST)
glEnable(GL_POINT_SMOOTH)
glPointSize(5.0)
glMatrixMode(GL_PROJECTION)
gluPerspective(45.0, 1.0, 0.1, 100.0)
glMatrixMode(GL_MODELVIEW)
gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0)
def display():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glColor3f(1.0, 1.0, 1.0)
glutSwapBuffers()
def reshape(window, width, height):
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(45.0, float(width) / float(height), 0.1, 100.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0)
def main():
glfw.init()
window = glfw.create_window(800, 800, "Voxel", None, None)
glfw.make_context_current(window)
glfw.set_mouse_button_callback(window, mouse_button_callback)
glfw.set_window_size_callback(window, reshape)
init()
while not glfw.window_should_close(window):
display()
glfw.swap_buffers(window)
glfw.poll_events()
glfw.terminate()
if __name__ == "__main__":
main()
```
Пример выше использует PyOpenGL для создания окна OpenGL и обработки событий. Функция `draw_voxel` рисует одиночную точку (воксель), а `mouse_button_callback` отвечает за отслеживание нажатия кнопки мыши и вызов функции `draw_voxel` с позицией клика.
Цвет точки и другие параметры отображения могут быть изменены при необходимости. Обратите внимание, что этот пример рисует точку в пространстве, но отображение может быть не видно без дополнительного кода для настройки камеры и освещения.