- 1
- 0
Видео с моей проблемой -
Почему-то когда координата на рядом с краем экрана, что-то происходит, не знаю что. Уже неделю не могу понять в чём проблема. Ниже блоки кода, которые используются для конвертации.
Почему-то когда координата на рядом с краем экрана, что-то происходит, не знаю что. Уже неделю не могу понять в чём проблема. Ниже блоки кода, которые используются для конвертации.
Матрицы:
private Matrix4f modelViewMatrix = new Matrix4f(new float[]{
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 1,
0, 0, 0, 1});
@Setter
private Matrix4f projectionMatrix = new Matrix4f(new float[]{
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1});
Методы для конвертации 3д в 2д:
public Vector3f worldToScreen(Vector3f position, Matrix4f matrix) {
getRenderPosition(position, matrix);
worldToScreen(position);
return position;
}
private Vector3f getRenderPosition(Vector3f position, Matrix4f matrix) {
double x = position.x() - mc.getEntityRenderDispatcher().camera.getPosition().x;
double y = position.y() - mc.getEntityRenderDispatcher().camera.getPosition().y;
double z = position.z() - mc.getEntityRenderDispatcher().camera.getPosition().z;
position.set((float) x, (float) y, (float) z);
position.transform(matrix);
return position;
}
private void worldToScreen(Vector3f position) {
int displayHeight = mc.getWindow().getHeight();
Matrix4f projection = projectionMatrix.copy();
projection.multiply(modelViewMatrix);
projection.project(position.x(), position.y(), position.z(),
GlStateManager.Viewport.x(), GlStateManager.Viewport.y(), GlStateManager.Viewport.width(), GlStateManager.Viewport.height(), position);
position.set((float) (position.x() / mc.getWindow().getGuiScale()),
(float) ((displayHeight - position.y()) / mc.getWindow().getGuiScale()), position.z());
}
место где я сетаю Projection матрицу в методе renderLevel из GameRenderer:
this.minecraft.getProfiler().popPush("camera");
Camera camera = this.mainCamera;
this.renderDistance = (float) (this.minecraft.options.getEffectiveRenderDistance() * 16);
PoseStack posestack = new PoseStack();
double d0 = this.getFov(camera, pPartialTicks, true);
posestack.last().pose().multiply(this.getProjectionMatrix(d0));
PoseStack posestack1 = posestack;
DimensionConverter.setProjectionMatrix( posestack.last().pose().copy());
if (Shaders.isEffectsModelView()) {
posestack = p_109092_;
}
Последнее редактирование: