cuốn sách gpt4 ai đã làm

Cảm biến Android cho OpenGL

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 11:20:53 26 4
mua khóa gpt4 Nike

Tôi muốn cảm biến Android hoạt động với opengl để xoay camera của opengl đến bất kỳ nơi nào điện thoại hướng tới.

Chi tiết: Nếu người chơi đang nhìn về phía đông, tôi muốn camera opengl cũng hướng về phía đông trong trò chơi; nếu người chơi chỉ lên bầu trời, tôi muốn camera opengl hướng về bầu trời, v.v.

Tôi đã thử sử dụng getRotationMatrix và nạp ma trận trên opengl nhưng nó chỉ hoạt động theo hướng lên xuống, nếu mình lật các ô sang 2 bên thì cũng không có gì khác biệt. Đây là những gì tôi đã làm cho đến nay (ứng dụng ở chế độ ngang):

    khoảng trống công khai trênSensorChanged(SensorEvent evt) {
int type=evt.sensor.getType();
phao alpha = 0,8f;

// Làm mịn dữ liệu cảm biến một chút
if (loại == Cảm biến.TYPE_MAGNETIC_FIELD) {
geomag[0]=geomag[0]*alpha+evt.values[0]*(1-alpha);
geomag[1]=geomag[1]*alpha+evt.values[1]*(1-alpha);
geomag[2]=geomag[2]*alpha+evt.values[2]*(1-alpha);
} khác nếu (loại == Cảm biến.TYPE_ACCELEROMETER) {
trọng lực[0]= trọng lực[0]*alpha+evt.values[0]*(1-alpha);
trọng lực[1]= trọng lực[1]*alpha+evt.values[1]*(1-alpha);
trọng lực[2]= trọng lực[2]*alpha+evt.values[2]*(1-alpha);
}

if ((type==Sensor.TYPE_MAGNETIC_FIELD) || (type==Sensor.TYPE_ACCELEROMETER)) {
spinningMatrix = float mới [16];
SensorManager.getRotationMatrix(rotationMatrix, null, Gravity, geomag);
SensorManager.remapCoordineSystem(
xoayMatrix,
Trình quản lý cảm biến.AXIS_Y,
Trình quản lý cảm biến.AXIS_MINUS_X,
vòng quayMatrix);
if (AOGLRenderer.rotationmatrix==null) AOGLRenderer.rotationmatrix = new float[16];
AOGLRenderer.rotationmatrix = spinningMatrix;
}
}

Trong mã opengl:

        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | // Tài liệu OpenGL.
GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
if (rotationmatrix!=null) gl.glLoadMatrixf(rotationmatrix, 0);
gl.glPushMatrix();
gl.glTranslatef(0, 0, -70);
g.draw(gl);
gl.glPopMatrix();
alpha+=2f;
gl.glTranslatef(0, -15, 0);
c.draw(gl);

Tôi hy vọng ai đó đã thực sự làm điều này có thể chia sẻ mã của họ. Tôi thực sự sẽ đánh giá cao nó!

câu trả lời hay nhất

Đối với ma trận nghiêng bạn cung cấp null - Điều này không đúng.

SensorManager.getRotationMatrix(rotationMatrix, null, Gravity, geomag);

Có rất nhiều điều về cách sử dụng SensorManager getRotationMatrix(...) ví dụ.

float[] R = float mới[16];
float[] I = float mới[16];

if (SensorManager.getRotationMatrix(R, I, accelerometerValues, geomagneticValues)) {
float[] AngleInRadians = new float[3];
SensorManager.getOrientation(R, AngleInRadians);
...
}

Mà còn,"Xoay camera opengl tới bất cứ nơi nào điện thoại được trỏ” cũng khá mơ hồ, chẳng hạn nếu bạn đang đề cập đến một phương pháp thực tế tăng cường nào đó thì bạn nên làm như vậy. AXIS_X ánh xạ tới AXIS_Z. Lưu ý rằng việc ánh xạ lại thậm chí có thể không cần thiết, chẳng hạn như khi bạn đã ghim hoạt động sang chế độ ngang. Thêm chi tiết đây .

Một số mã mẫu liên quan đến dữ liệu cảm biến và OpenGL ES:

Về cảm biến Android dành cho OpenGL, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/8632520/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress