This repository has been archived on 2023-10-09. You can view files and clone it, but cannot push or open issues or pull requests.
Files
blender-archive/source/blender/render/intern/include/zbuf_int.h
2002-12-27 13:11:01 +00:00

198 lines
5.9 KiB
C++

/*
* zbuf_int.h
* internal interface for zbuf.h (ie. functions that are not used
* anywhere else)
*
* $Id$
*
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. The Blender
* Foundation also sells licenses for use in proprietary software under
* the Blender License. See http://www.blender.org/BL/ for information
* about this.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
*
* The Original Code is: all of this file.
*
* Contributor(s): none yet.
*
* ***** END GPL/BL DUAL LICENSE BLOCK *****
*/
#ifndef ZBUF_INT_H
#define ZBUF_INT_H
#include "render_types.h"
#include "zbuf_types.h"
/**
* Convert a homogenous coordinate to a z buffer coordinate. The
* function makes use of Zmulx, Zmuly, the x and y scale factors for
* the screen, and Zjitx, Zjity, the pixel offset. (These are declared
* in render.c) The normalised z coordinate must fall on [0, 1].
* @param zco [3, 4 floats] pointer to the resulting z buffer coordinate
* @param hoco [4 floats] pointer to the homogenous coordinate of the
* vertex in world space.
*/
void hoco_to_zco(float *zco, float *hoco);
/**
* Fill the z buffer for alpha?
*
* This is one of the z buffer fill functions called in zbufclip() and
* zbufwireclip().
*
* @param v1 [4 floats, world coordinates] first vertex
* @param v2 [4 floats, world coordinates] second vertex
* @param v3 [4 floats, world coordinates] third vertex
*/
void zbufinvulAc(float *v1, float *v2, float *v3);
/**
* Fill the z buffer, but invert z order, and add the face index to
* the corresponing face buffer.
*
* This is one of the z buffer fill functions called in zbufclip() and
* zbufwireclip().
*
* @param v1 [4 floats, world coordinates] first vertex
* @param v2 [4 floats, world coordinates] second vertex
* @param v3 [4 floats, world coordinates] third vertex
*/
void zbufinvulGLinv(float *v1, float *v2, float *v3);
/**
* Fill the z buffer, and add the face index to
* the corresponing face buffer. Writes into R.rectz and R.rectot. It
* assumes that Zvlnr is set to the face index of the face under
* consideration. Zvlnr is written into R.rectot. R.rectz
*
* This is one of the z buffer fill functions called in zbufclip() and
* zbufwireclip().
*
* @param v1 [4 floats, world coordinates] first vertex
* @param v2 [4 floats, world coordinates] second vertex
* @param v3 [4 floats, world coordinates] third vertex
*/
void zbufinvulGL(float *v1, float *v2, float *v3);
/**
* Fill the z buffer. The face buffer is not operated on!
*
* This is one of the z buffer fill functions called in zbufclip() and
* zbufwireclip().
*
* @param v1 [4 floats, world coordinates] first vertex
* @param v2 [4 floats, world coordinates] second vertex
* @param v3 [4 floats, world coordinates] third vertex
*/
void zbufinvulGL_onlyZ(float *v1, float *v2, float *v3);
/**
* Prints 3 unlabelled floating point values to stdout. Used for diagnostics.
* @param v1 any float
* @param v2 any float
* @param v3 any float
*/
void print3floats(float *v1, float *v2, float *v3);
/**
* Checks labda and uses this to make decision about clipping the line
* segment from v1 to v2. labda is the factor by which the vector is
* cut. ( calculate s + l * ( t - s )). The result is appended to the
* vertex list of this face.
* Note: uses globals.
* (arguments: one int, one pointer to int... why?)
* @param v1 start coordinate s
* @param v2 target coordinate t
* @param b1
* @param b2
* @param clve vertex vector.
*/
static void maakvertpira(float *v1, float *v2, int *b1, int b2, int *clve);
/**
* Sets labda: flag, and parametrize the clipping of vertices in
* viewspace coordinates. labda = -1 means no clipping, labda in [0,
* 1] means a clipping.
* Note: uses globals.
* @param v1 start coordinate s
* @param v2 target coordinate t
* @param b1
* @param b2
* @param b3
* @param a index for coordinate (x, y, or z)
*/
static void clipp(float *v1, float *v2, int b1, int *b2, int *b3, int a);
/**
* Tests whether this coordinate is 'inside' or 'outside' of the view
* volume? By definition, this is in [0, 1].
* @param p vertex z difference plus coordinate difference?
* @param q origin z plus r minus some coordinate?
* @param u1 [in/out] clip fraction for ?
* @param u2 [in/out]
* @return 0 if point is outside, or 1 if the point lies on the clip
* boundary
*/
static short cliptestf(float p, float q, float *u1, float *u2);
/* not documented yet */
/* not sure if these should stay static... */
static int clipline(float *v1, float *v2);
/**
* Provide book-keeping for the z buffer data lists.
*/
APixstr *addpsmainA(void);
void freepsA(void);
APixstr *addpsA(void);
/**
* Fill function for the z buffer (fills lines)
*/
void zbuflineAc(float *vec1, float *vec2);
void zbufline(float *vec1, float *vec2);
/**
* Copy results from the solid face z buffering to the transparent
* buffer.
*/
void copyto_abufz(int sample);
/**
* Do accumulation z buffering.
*/
void zbuffer_abuf(void);
/**
* Shade this face at this location in SCS.
*/
void shadetrapixel(float x, float y, int vlak);
/**
* Determine the distance to the camera of this halo, in ZCS.
*/
unsigned int calcHaloDist(HaloRen *har);
#endif /* ZBUF_INT_H */