1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
// Copyright (C) 2011 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma version(1)
#pragma rs java_package_name(com.android.scenegraph)
//#define DEBUG_CAMERA
#include "transform_def.rsh"
void root(const rs_allocation *v_in, rs_allocation *v_out, const float *usrData) {
SgCamera *cam = (SgCamera *)rsGetElementAt(*v_in, 0);
float aspect = *usrData;
cam->aspect = aspect;
const SgTransform *camTransform = (const SgTransform *)rsGetElementAt(cam->transformMatrix, 0);
rsMatrixLoadPerspective(&cam->proj, cam->horizontalFOV, cam->aspect, cam->near, cam->far);
rs_matrix4x4 camPosMatrix;
rsMatrixLoad(&camPosMatrix, &camTransform->globalMat);
float4 zero = {0.0f, 0.0f, 0.0f, 1.0f};
cam->position = rsMatrixMultiply(&camPosMatrix, zero);
rsMatrixInverse(&camPosMatrix);
rsMatrixLoad(&cam->view, &camPosMatrix);
rsMatrixLoad(&cam->viewProj, &cam->proj);
rsMatrixMultiply(&cam->viewProj, &cam->view);
#ifdef DEBUG_CAMERA
printCameraInfo(cam);
#endif //DEBUG_CAMERA
}
|